Hallo,
Huh? fgets() liest halt ein Zeichen weniger ein, weil Du bei fgets() die Puffergröße (inkl. 0-Byte) angibst und nicht die String-Länge - siehe auch mein Beispiel, wo ich 6 statt 5 übergebe. Das gleiche passiet aber auch in C. Wenn die Funktion nun schon so heißt, wie ihr C-Pendant: Warum sollte sie sich dann nicht auch so verhalten?
Der Einheitlichkeit innerhalb der gleichen Sprache halber? fread liest (bis zu) $length Zeichen, fgets nur (bis zu) $length-1.
Das ist aber in C genau so und die PHP-Entwickler haben die C-API kopiert. Muss einem nicht gefallen. Tut es mir auch nicht. Wenn ich ganz ehrlich sein soll, habe ich noch keine Sprache gefunden, bei der mir die I/O-Lib wirklich gefallen hat. Mir ging's hierbei nur darum, zu erläutern, warum die PHP-Funktion so reagiert.
Viele Grüße,
Christian