Bon, Ce problème de binaire avec PHP me laissait sur ma faim. J'ai donc fait quelques essais hier soir et la conclusion est la suivante :
Il est possible de lire et d'écrire du binaire avec les fonction fread et fwrite. Il y a toutefois quelques restrictions. Il est impératif de passer l'argument "length" pour chacune de ces fonctions. En l'absence de valeur de longueur, fread et fwrite se comportent exactement comme fgets/fputs; cad que ce qui est lu/écrit est considéré comme une chaîne de caractère. Le problème est que la fonction fread ne retourne PAS le nombre de bytes lus ! Il faut donc que vous sachiez exactement combien de bytes ont effectivement été lus dans votre buffer... Surtout si vous désirez ensuite écrire se même buffer dans un fichier (ou autre). Petit programme d'exemple : <? $Buffer = "abcd\0001234"; $stream = fopen("toto", "w"); fwrite($stream, $Buffer, 9); fclose($stream); $stream = fopen("toto", "r"); $NewBuf = fread($stream, 9); fclose($stream); $stream = fopen("titi", "w"); fwrite($stream, $NewBuff, 9); fclose($stream); ?> Les deux fichiers générés sont identiques et contiennent bien les 9 caractères de Buffer, y compris le NULL (od -c). Ce qui est surprenant est que dans le manuel de la fonction fwrite il est dit : fwrite() writes the contents of string to the file stream pointed to by fp. If the length argument is given, writing will stop after length bytes have been written or the end of string is reached, whichever comes first. Ouai... ben j'crois que le "whicever comes first" n'a pas l'air de fonctionner très bien... heureusement pour moi dans ce cas :-) Par contre je crois qu'il ne faudrait pas trop compter dessus car : - Soit c'est un bug et le code doit se comporter comme décrit dans la doc. - Soit c'est un bug de la doc... Voilà, c'est une demie bonne nouvelle et ça devrait clore le sujet pour l'instant. Daniel -- http://www-internal.alphanet.ch/linux-leman/ avant de poser une question. Ouais, pour se désabonner aussi.