(PHP 5, PHP 7, PHP 8)
fprintf — Schreibt einen formatierten String in einen Stream
Schreibt einen gemäß format
erstellten String in den Stream handle
.
stream
Eine Dateisystemressource (resource), wie sie in der Regel von fopen() zurückgegeben wird.
format
Der Formatstring setzt sich aus keiner oder mehreren Anweisungen zusammen: Normale Zeichen (abgesehen von %
), die direkt in das Ergebnis kopiert werden und Konvertierungsanweisungen, die jeweils ihre eigenen Parameter abrufen.
Eine Konvertierungsanweisung folgt diesem Prototypen: %[ArgNum$][Flags][Weite][.Präzision]Spezifizierer
.
Eine Ganzzahl gefolgt von einem Dollarzeichen $
, die die Nummer des Arguments angibt, das für die Konversion verwendet werden soll.
Flag | Beschreibung |
---|---|
- | Linksbündig innerhalb der angegebenen Feldbreite; Rechtsbündig ist der Standard |
+ | Positive Zahlen mit einem Pluszeichen + ; Standardmäßig werden nur negative Zahlen mit negativen Vorzeichen ausgegeben |
(Leerzeichen) | Füllt das Ergebnis mit Leerzeichen auf. Dies ist der Standard. |
0 | Füllt nach Links mit Nullen auf. Mit dem s -Spezifizierer kann dies auch nach rechts mit Nullen auffüllen. |
' (Zeichen) | Füllt das Ergebnis mit dem angegebenen Zeichen auf. |
Entweder eine Ganzzahl die angibt, wie viele Zeichen (Minimum) das Konvertierungsergebnis haben soll oder *
. Wenn *
verwendet wird, wird die Breite als zusätzlicher ganzzahliger Wert angegeben, der bestimmt, wie viele Zeichen vor dem durch den Spezifizierer formatierten Wert stehen sollen.
Ein Punkt .
, optional gefolgt von einer Ganzzahl oder *
, dessen Bedeutung vom Spezifizierer abhängt:
e
, E
, f
und F
: Dies stellt die Anzahl der Nachkommastellen an, die nach dem Dezimaltrennzeichen ausgegeben werden soll (Standardmäßig ist dies 6). g
, G
, h
und H
: Die maximale Anzahl der auszugebenenden signifikanten Nachkommastellen. s
Spezifizierer: Verhält sich wie ein Abschneidepunkt, der eine maximale Anzahl an Zeichen in der Zeichenkette angibt. Hinweis: Wenn der Punkt ohne einen expliziten Wert für die Genauigkeit angegeben wird, wird 0 angenommen. Wenn
*
verwendet wird, wird die Genauigkeit als zusätzliche Ganzzahl vor dem durch den Bezeichner formatierten Wert angegeben.
Spezifizierer | Beschreibung |
---|---|
% | Ein Prozentzeichen. Kein Parameter nötig. |
b | Der Parameter wird als Ganzzahl behandelt und als Binärzahl ausgegeben. |
c | Der Parameter wird als Ganzzahl behandelt und als Zeichen aus dem ASCII-Zeichensatz ausgegeben. |
d | Der Parameter wird als Ganzzahl behandelt und als (vorzeichenbehaftete) Dezimalzahl ausgegeben. |
e | Der Parameter wird als Zahl in wissenschaftlicher Schreibweise (z. B. 1.2e+2) behandelt. |
E | Wie der Spezifizierer e , aber schreibt einen Großbuchstaben (z. B. 1.2E+2). |
f | Der Parameter wird als Gleitkommazahl betrachtet und als Gleitkommazahl ausgegeben (abhängig von der Locale). |
F | Der Parameter wird als Gleitkommazahl betrachtet und als Gleitkommazahl (unabhängig von der Locale) ausgegeben. |
g | Generelles Format. Sei P gleich der Genauigkeit, wenn nicht Null, 6, wenn die Genauigkeit nicht angegeben ist, oder 1 wenn die Genauigkeit Null ist. Dann, wenn eine Konvertierung mittels E einen Exponenten von X hätte: Wenn P > X ≥ −4, erfolgt die Konvertierung mit Spezifizierer f und Genauigkeit P - (X + 1), andernfalls mit Spezifizierer e und Genauigkeit P - 1. |
G | Wie der Spezifizierer g , aber es wird E und f verwendet. |
h | Wie der Spezifizierer g , aber es werden F verwendet. Verfügbar ab PHP 8.0.0. |
H | Wie der Spezifizierer g , aber es werden E und F verwendet. Verfügbar ab PHP 8.0.0. |
o | Der Parameter wird als Ganzzahl betrachtet und als Oktalzahl ausgegeben. |
s | Der Parameter wird als Zeichenkette betrachtet und ausgegeben. |
u | Der Parameter wird als Ganzzahl betrachtet und als vorzeichenlose Dezimalzahl ausgegeben. |
x | Der Parameter wird als Ganzzahl betrachtet und als Hexadezimalzahl (mit Kleinbuchstaben) ausgegeben. |
X | Der Parameter wird als Ganzzahl betrachtet und als Hexadezimalzahl (mit Großbuchstaben) ausgegeben. |
Der Spezifizierer c
ignoriert Auffüllung und Weite.
Der Versuch, die Kombination aus Zeichenketten mit Weite-Spezifizierern und Zeichensätzen die mehr als ein Byte pro zeichen erwarten zu verwenden, führt zu unvorhersehbaren Ergebnissen.
Variablen werden auf einen für den Spezifizier passenden Typen umgewandelt:
Typ | Spezifizierer |
---|---|
string | s |
int | d , u , c , o , x , X , b |
float | e , E , f , F , g , G , h , H |
values
Gibt die Länge der geschriebenen Zeichenkette zurück.
Wenn die Anzahl der Argumente Null ist, wird seit PHP 8.0.0 ein ValueError ausgelöst. Vor PHP 8.0.0 wurde stattdessen eine E_WARNING
ausgegeben.
Wenn [width]
kleiner als Null oder größer als PHP_INT_MAX
ist, wird seit PHP 8.0.0 ein ValueError ausgelöst. Vor PHP 8.0.0 wurde stattdessen eine E_WARNING
ausgegeben.
Wenn [precision]
kleiner als Null oder größer als PHP_INT_MAX
ist, wird seit PHP 8.0.0 ein ValueError ausgelöst. Vor PHP 8.0.0 wurde stattdessen eine E_WARNING
ausgegeben.
Wenn weniger Argumente angegeben werden als nötig, wird seit PHP 8.0.0 ein ArgumentCountError ausgelöst. Vor PHP 8.0.0 wurde stattdessen false
zurückgegeben und eine E_WARNING
ausgegeben.
Version | Beschreibung |
---|---|
8.0.0 | Diese Funktion gibt bei Auftreten eines Fehlers nicht mehr false zurück. |
8.0.0 | Wenn die Anzahl der Argumente Null ist, löst diese Funktion einen ValueError aus; vorher gab sie stattdessen eine E_WARNING aus. |
8.0.0 | Wenn [width] kleiner als Null oder größer als PHP_INT_MAX ist, löst diese Funktion einen ValueError aus; vorher gab sie stattdessen einen E_WARNING aus. |
8.0.0 | Wenn [precision] kleiner als Null oder größer als PHP_INT_MAX ist, löst diese Funktion einen ValueError aus; vorher gab sie stattdessen eine E_WARNING aus. |
8.0.0 | Wenn weniger Argumente angegeben werden als nötig, löst diese Funktion einen ArgumentCountError aus; vorher gab sie stattdessen eine E_WARNING aus. |
Beispiel #1 fprintf(): Integer mit vorangestellten Nullen
<?php
if (!($fp = fopen('date.txt', 'w'))) {
return;
}
fprintf($fp, "%04d-%02d-%02d", $year, $month, $day);
// schreibt ein ISO-formatiertes Datum in die Datei date.txt
?>
Beispiel #2 fprintf(): Formatieren einer Währung
<?php
if (!($fp = fopen('waehrung.txt', 'w'))) {
return;
}
$betrag1 = 68.75;
$betrag2 = 54.35;
$summe = $betrag1 + $betrag2;
// echo $summe würde "123.1" ausgeben;
$laenge = fprintf($fp, '%01.2f', $summe);
// schreibt "123.10" in waehrung.txt
echo "$laenge Bytes wurden in waehrung.txt geschrieben";
// verwendet den Rückgabewert von fprintf um die Anzahl der geschriebenen Bytes herauszufinden
?>