php_stream_make_seekable

(no version information, might be only in CVS)

php_stream_make_seekable -- Convertit un flux en flux avec un pointeur de position

Description

int php_stream_make_seekable ( php_stream * origstream, php_stream ** newstream, int flags )

php_stream_make_seekable() vérifie si origstream dispose d'un pointeur de potision. Si ce n'est pas le cas, il va copier les données du flux dans un autre flux temporaire, et disposant d'un pointeur de position. Si cela fonctionne, newstream sera un flux valide même si le flux original avait déjà un pointeur de position.

flags vous permet de spécifier votre préférence pour le flux retourné : utilisez la constante PHP_STREAM_NO_PREFERENCE pour utiliser le flux à pointeur de position par défaut (qui utilise la mémoire, mais passe automatiquement sur un fichier si le fichier devient trop grand), ou bien utilisez PHP_STREAM_PREFER_STDIO pour utiliser un fichier temporaire classique.

Tableau 63-1. Valeurs retournées par php_stream_make_seekable()

ValeurSignification
PHP_STREAM_UNCHANGEDLe flux original avait déjà son pointeur de position. newstream vaut origstream.
PHP_STREAM_RELEASEDLe flux originl n'avait pas pointeur de position, et il a été détruit. Vous n'avez plus accès à origstream.
PHP_STREAM_FAILEDUne erreur est survenue lors de la conversion. newstream vaut NULL; origstream est toujours valide.
PHP_STREAM_CRITICALUne erreur est survenue lors de la conversion de origstream, qui est maintenant dans un état indéterminé. newstream vaut NULL et il est très recommandé que vous vous fermiez origstream.

Note : Si vous devez déplacer le pointeur et écrire dans le flux, n'utilisez pas cette fonction, car le flux retourné est un flux mis en cache. Il n'est pas garantit qu'il soit lié à la ressource originale.

Note : Si vous avez uniquement de déplacer le pointeur de position vers l'avant, il n'y a pas besoin d'appeler cette fonction, car l'API va automatiquement émuler ce fonctionnement avec le paramètre whence à la valeur SEEK_CUR.

Note : Si origstream repose sur le réseau, cette fonction va se bloquer jusqu'à ce que tout le contenu soit téléchargé.

Note : Ne JAMAIS appeler cette fonction avec un flux origstream qui est une référence à un pointeur de fichier dans un script PHP. Cette fonction pourrait alors fermer le fichier, ce qui conduira à un crash au prochain accès au pointeur.

Note : Dans de nombreux cas, cette fonction ne peut réussir que si origstream vient d'être tout juste ouvert, et qu'aucune données n'ont été mises dans les caches de la couche de flux. Pour cette raison, et parce que cette fonction est compliquée à utiliser correctement, il est recommandé que vous utilisiez la fonction php_stream_open_wrapper() en lui passant la constante PHP_STREAM_MUST_SEEK dans vos options, au lieu d'appeler cette fonction directement.