Services webmasters
Partenaires
Jeux concours gratuits
 
Eléments de bases
<<<
Les flôts qui sont des ressources Référence des API communes de flôts
>>>

9.1 API de flôts les auteurs d'extensions
9 PHP API: Interface pour les extensions
 Manuel PHP

Présentation
Eléments de bases
->Les flôts qui sont des ressources
Référence des API communes de flôts
Streams Dir API Reference
API des flôts pour les fichiers
Streams Socket API Reference
Streams Structures
Constantes de flôts

9.1.3 Les flôts qui sont des ressources

Tous les flôts sont enregitrés comme des ressources lorsqu'il sont créés. Cela garantit qu'ils seront convenablement déblayés de la mémoire, même en cas d'erreur fatale. Toutes les fonctions du sytème de fichier de PHP opère sur des ressources : cela signifie que vos extensions peuvent accepter des pointeurs de fichiers comme paramètre, et retourner des flôts. L'API des flôts rend ce processus très convivial.

Comment accepter un flôt comme paramètre d'entrée

PHP_FUNCTION(example_write_hello)
{
    zval *zstream;
    php_stream *stream;
    
    if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zstream))
        return;
    
    php_stream_from_zval(stream, &zstream);

    /* Vous pouvez maintenant utiliser votre flôt. Cependant, vous ne
       "possédez" pas le flôt, mais le script le possède. Cela signifie
       que vous de DEVEZ PAS fermer le flôt, car sinon, PHP va crasher! */

    php_stream_write(stream, "hello\n");
        
    RETURN_TRUE();
}

Comment retourner un flôt depuis une fonction

PHP_FUNCTION(example_open_php_home_page)
{
    php_stream *stream;
    
    stream = php_stream_open_wrapper("http://www.php.net", "rb", REPORT_ERRORS, NULL);
    
    php_stream_to_zval(stream, return_value);

    /* A partir de ce moment, le flôt appartient au script.
      Si vous le fermer ici, vous allez faire crasher PHP! */
}

Comme les flôts sont automatiquement déblayés de la mémoire, il est tentant de penser que vous pouvez être des programmeurs paresseux et ne pas vous préoccuper de la fermeture du flôt lorsque vous en avez terminé avec lui. Même si une telle approche fonctionnera probablement, ce n'est pas une bonne idée pour un bon nombre de raisons : les flôts conservent des verrous sur les ressources systèmes durant un temps plus long, ce qui fait que laisser le verrous empêche d'autres processus d'accéder à cette ressource. Si le script gère un grand nombre de fichier, l'accumulation de ressources, en terme de mémoire et de nombre de fichiers ouverts, causer l'échec des requêtes du serveur web. Cela n'est plus aussi séduisant, n'est-ce pas? L'API de flôt inclut un peu de magie pour que vous puissiez garder votre code propre : si un flôt n'est pas fermé par votre code alors qu'il devrait l'être, vous trouverez des informations de débogage dans le fichier d'historique d'erreur de votre serveur web.

Note

Utilisez toujours une version de débogagge de PHP lorsque vous développez ( --enable-debug lors de la configuration de la compilation) car de nombreux efforts ont été fait pour vous aider à traquer les fuites de mémoire.

Dans certains cas, il est pratique de garder un flôt ouvert pour toute la durée de la requête, afin de l'utiliser comme fichier d'historique. Ecrire le code nécessaire au nettoyage propre d'un tel fichier n'est pas difficile, mais ce sont plusieurs lignes e code qui ne sont pas strictement nécessaire. Pour vous éviter l'écriture de ce code, vous pouvez marquer le flôt pour qu'il soit automatiquement libéré lorsque viendra le temps de libérer les ressources. Pour cela, vous pouvez utiliser la fonction php_stream_auto_cleanup .

<< Les flôts qui sont des ressources >>
Eléments de bases API de flôts les auteurs d'extensions Référence des API communes de flôts
Services webmasters
Les manuels
 
CoursPHP.com - Reproduction interdite -