IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Pré-traitement de téléchargement par PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut Pré-traitement de téléchargement par PHP
    Bonjour,

    bon alors c'est une question assez technique je vous l'accorde et le but est uniquement de gagner en performance serveur.

    Il est assez simple de faire un script qui redirige le contenu d'un fichier sur la sortie standard en fonction d'une url ou de paramètre. Mais la redirection du flux est alors gérer par php (par exemple echo file_get_contents('monfichier'); ).

    Le problème c'est que celui-ci est particulièrement mangeur de ressources comparé à un affichage tout simple sans exécution de script via apache ou même via perl.

    C'est pourquoi je sollicite vos connaissances pour savoir s'il n'existerait pas une fonction, un module php ou apache qui permettrait à php de déléguer la sortie standard à un autre programme en lui indiquant un fichier a afficher|sortir|envoyer.

    un exemple utopique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    $fichier = basename($_SERVER['REQUEST_URI']);
    header('Content-type: untype');
    redirect_flux_of_file($fichier);
    // php a terminez sont exécution. Il n'attend pas que $fichier soit envoyé en entier, il se ferme.
    // A la limite, la fonction redirect_flux_of_file provoque sa fermeture (die)
    ?>
    Merci!!

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    J'ignore si il est possible de faire un tel processus en non-bloquant.
    Par contre, pour le probleme de performances, je suppose que c'est ameliorable en utilisant un tampon au lieu de charger le fichier en memoire d'un coup avec file_get_contents ...
    php.net/stream_copy_to_stream
    Bon courage.

  3. #3
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    très interressantes ces fonctions de stream j'avais jamais regardé en détail.

    oui l'utilisation d'un buffer fait largement gagner en mémoire et en temps mais on obtient toujours pas une rapidité suffisante comparé au autres languages.

    Avec stream_copy_to_stream je sait pas si je vais gagner grand chose vu que je vais quand même envoyer le tout sur la sortie php://stdout... je vais quand même tester.

    Mais je soupsonne vraiment un ou plusieurs filtres inutiles entre php et apache...

  4. #4
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    oui l'utilisation d'un buffer fait largement gagner en mémoire et en temps mais on obtient toujours pas une rapidité suffisante comparé au autres languages.

    PHP n'a rien a envier en matiere de performances : migrer de mod_php a fastcgi, implementer apc, utiliser les streams.

  5. #5
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    Citation Envoyé par is_null Voir le message
    PHP n'a rien a envier en matiere de performances : migrer de mod_php a fastcgi, implementer apc, utiliser les streams.
    Cela est loin d'être le cas quand on le compare à des language comme python ou perl.

    L'utilisation des fonctions stream_* ne fais gagner que très peu de temps. C'est la lecture du fichier et transmission de php à apache qui gène.

    Mais je viens de découvrir un mod très pratique qui fournit une fonctionnalité que lighthttp implémente depuis longtemps. Il s'agit du mod_x_sendfile.

    ça permet de dire à apache d'envoyer un fichier, tout simplement. Il suffit de renvoyer un header "X-Sendfile: chemin/nom_du_fichier", à partir de la php n'affichera plus rien, on peut donc arrèter l'éxécution, et c'est ce fichier qui sera retourné en sortie.

    Mais Malheur... le mod ne marche que sur apache 2.0 ...

  6. #6
    Membre du Club
    Profil pro
    dbadmin et dev web magento
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dbadmin et dev web magento

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Points : 56
    Points
    56
    Par défaut
    Pour info j'ai réussi à le compiler pour apache 2.2

    http://www.xorax.info/blog/programma...-sendfile.html

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Traitement des erreurs SQL par Php?
    Par badoumba dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 12/10/2011, 09h43
  2. Traitement d'image par php
    Par xantes dans le forum Langage
    Réponses: 6
    Dernier message: 22/05/2009, 16h00
  3. [Mail] Reception et traitement d'un mail par PHP
    Par anisb dans le forum Langage
    Réponses: 4
    Dernier message: 20/10/2006, 20h24
  4. traitement formulaire par php
    Par loudv dans le forum Langage
    Réponses: 2
    Dernier message: 11/07/2006, 19h12
  5. [type MIME] css généré par php -> probleme
    Par prgasp77 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 23/09/2004, 21h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo