Hey

,
Ça fait longtemps que j'ai pas ouvert un sujet tiens.
Je me remettais un peu sur les pointeurs de fichier en PHP (les positions à partir de laquelle PHP doit écrire). Pour mémoire, on parle avec les constantes SEEK_CUR, SEEK_END, et SEEK_SET, respectivement pour la position courante, la position de fin du fichier, et la position définie via la variable
whence. Enfin bref, je vais pas refaire un cours hein, je m'adresse à ceux qui savent

.
Donc voilà. Une fois que l'on a une position pour le pointeur, on peut aussi parler de position par rapport aux caractères. Soit on est à droite du caractère, soit on est gauche du caractère (notion très forte dans vi par exemple : commande a ou i ?). Et dans PHP, ça m'a l'air d'être gérer comme un patate. Exemple :
$fp = fopen('fichier', 'rb');
// On remet le pointeur au début, même s'il l'est par défaut.
fseek($fp, 0, SEEK_SET);
// On lit le premier caractère.
echo fread($fp, 1);
Donc ici, on est position gauche, et on lit de 1 vers la droite. Donc on a sélectionné le premier caractère. Et on se retrouve en position gauche du second caractère.
Maintenant, on essaye ceci :
// On se place à la fin du fichier.
fseek($fp, 0, SEEK_END);
// Et on lit un caractère.
echo fread($fp, 1);
Ne marchera pas. Pourquoi ? Car cette fois, fseek s'est mis en position droite. Si on veut lire le dernier caractère, il faut faire :
fseek($fp, -1, SEEK_END);
echo fread($fp, 1);
On pourrait penser que c'est logique, mais en fait pas du tout. Et c'est encore moins rigoureux. Dans le premier exemple, on est en position gauche du caractère :
Dans le seconde exemple, on est en position droite :
Dans le dernier exemple, on est en position droite :
Alors que dans le second exemple on devrait être en position gauche :
La seule explication que j'ai trouvé est qu'il se place sur le caractère de fin de fichier, et donc il serait en effet à gauche du caractère, mais ce serait un peu bête là ...
Si quelqu'un a compris ma question, est-ce qu'il peut m'expliquer ce comportement étrange ?
D'après mes souvenirs, ce comportement est le même en C, ce qu'il me laisse penser qu'il travaille avec le caractère de fin de fichier (EOL). Il a quelle forme déjà ?
Merci

.