php_stream_cast

(no version information, might be only in CVS)

php_stream_cast -- Convertit un flux en une autre forme, comme un FILE* ou une socket

Description

int php_stream_cast ( php_stream * stream, int castas, void ** ret, int flags )

php_stream_cast() tente de convertir le flux stream en un autre ressource indiqué par castas. Si ret est NULL, le flux est interrogé pour savoir une telle conversoin est posible, sans effectuer réellemnt la conversion (mais certains état interne pourrait être changés dans ce cas). Si flags vaut REPORT_ERRORS, un message d'erreur apparaîtra si une erreur survient durant la conversion.

Note : Cette fonction retourne SUCCESS en cas de réussite et FAILURE en cas d'échec. Soyez prévenu que vous devez faire une comparaison explicite avec SUCCESS ou FAILURE à cause des valeurs sous jacentes de ces constantes. Une simple comparaison d'expression booléenne ne sera pas interprétée comme vous le souhaitez.

Tableau 63-1. Types de ressources de castas

ValeurSignification
PHP_STREAM_AS_STDIOUn pointeur ANSI FILE* qui représente le flux
PHP_STREAM_AS_FDUn pointeur de fichier de type POSIX qui représente le flux
PHP_STREAM_AS_SOCKETDUn pointeur de socket réseau qui représente le flux

En plus des types de ressources basiques ci-dessus, le processus de conversion peut être modifié en utilisant les paramètres ci-dessous, ou bien en utilisant l'opérateur OR pour combiner le type de ressource avec une ou plusieurs des valeurs suivantes :

Tableau 63-2. Types de ressources pour castas

ValeurSignification
PHP_STREAM_CAST_TRY_HARDEssaie aussi fort que possible, même si c'est au prix de quelques ressources supplémentaires, que la conversion réussisse
PHP_STREAM_CAST_RELEASEInformque l'API de flux que d'autre code (possible une bibliothèque tierce partie) sera responsable de la gestion des ressources de bas niveau. Cela fait que le flux stream sera fermé de telle façon à ce que le gestionnaire soit préservé et retourné dans le paramètre ret. Si la fonction réussit, le paramètre stream doit être considéré comme fermé, et inutilisable en l'état.

Note : Si votre système supporte la fonction fopencookie() (les systèmes utilisant la bibliothèque glibc 2 ou plus récent), l'API de flux sera toujours capable de créer des pointeurs de fichiers de type ANSI FILE* pour tous les flux. Même si c'est extrêmement utile pour passer des flux PHP à des bibliothèque tierce partie, un tel système n'est pas portable. Il est demandé que vous considériez la portabilité e vos fonctions avant de diffuser votre extension. Si l'utilisation de fopencookie() n'est pas désirable, il est recommandé d'interroger le flux pour voir s'il supporte naturellement la conversion en FILE* en utilisant la fonction php_stream_is()

Note : Si vous demandez une socket réseau à la place d'un FILE*, l'API de flux va utiliser la fonction fdopen() pour la créer pour vous. Soyez prévenu que faire cela risque de perdre les données qui ont été mises en buffer dans le flux, si vous mélanger des appels de l'API de flux et les appels standards ANSI.

Voir aussi php_stream_is() et php_stream_can_cast().