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.

Répondre à