Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
965 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] multitasking / multithreading en PHP ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] multitasking / multithreading en PHP ?

n°2185926
zeblods
Posté le 15-04-2013 à 17:45:40  profilanswer
 

Bonjour,
 
Je n'ai pas une très grande expérience en PHP et je me trouve confronté à un problème.
 
J'utilise @home un serveur avec pour principale fonctionnalité celle de NAS.
J'utilisais, pour pouvoir accéder à mes fichiers de n'importe où, un serveur Apache avec l'option Indexes activé et une gestion basic d'identification à base de .htaccess.
Voulant améliorer un peu la chose je me suis lancé dans un petit script PHP exécuté par Apache avec de l'URL Rewriting qui gère l'identification, puis me permet de naviguer dans mes dossiers / fichiers pour finir par les télécharger.
 
Pour ce faire j'utilise ce morceau de code :


$file = "/chemin/vers/mon/fichier";
$name = "nom_du_fichier";
 
$finfo = finfo_open();
$file_info = finfo_file($finfo, $file, FILEINFO_MIME);
finfo_close($finfo);
header("Content-Type: " . $file_info);
header("Content-Length: " . filesize($file));
header("Content-disposition: attachment; filename=\"" . $name . "\"" );
readfile($file);
exit;


Cela fonctionne bien, les fichiers se téléchargent sans soucis, et sans erreurs.
 
Sauf que PHP étant visiblement monotâche, quand je suis en train de télécharger un fichier, je ne peux plus rien faire d'autre (naviguer dans les dossiers, lancer un second téléchargement en parallèle, etc.) comme le permet Apache et son option Indexes...
 
Y a t-il un moyen simple de palier à ce problème sans avoir recours à la gestion des Threads dans PHP ?
Une option Apache peut être ?
 
Merci par avance à vos réponses :)


Message édité par zeblods le 15-04-2013 à 17:53:28
mood
Publicité
Posté le 15-04-2013 à 17:45:40  profilanswer
 

n°2185940
zeblods
Posté le 15-04-2013 à 18:40:37  profilanswer
 

Je pense avoir une piste.
 
Le problème semble venir d'un lock à cause de la gestion de session de php via des fichiers.
-> http://php.net/manual/fr/function. [...] andler.php
 

Citation :

It is important to understand that PHP's default file-based session handling LOCKS the session file, inherently allowing ONLY ONE thread handling any given session at a time.


 
Donc quand on utilise les sessions PHP par défaut, à partir du moment ou l'on a "session_start();" une seule requète peut être traitée à la fois...
 
Je viens d'essayé mon code, en désactivant la gestion des sessions, et ça fonctionne en parallèle sans problème !
 
Je vais creuser dans cette direction.
 
 
[EDIT]
 
Il suffit en fait d'intercaller un "session_write_close();" avant le "readfile($file);" pour que tout fonctionne en parallèle sans soucis.  :sarcastic:


Message édité par zeblods le 15-04-2013 à 18:43:41
n°2185986
CyberDenix
Posté le 16-04-2013 à 00:17:59  profilanswer
 

J'ai eu le même problème le jour où j'ai voulu réaliser un formulaire de multi-upload d'images (genre 100 à la fois).
 
J'avais AJAXifié et asynchronisé à mort mon code, mais rien à faire, mon serveur n'uploadait un fichier à la fois.
 
C'est alors que je me suis créé une classe Session ouverte en readonly par défaut : non seulement mes uploads se sont faits en parallèle, mais en plus cette approche s'est révélée 400x plus performante que la session de base en PHP.
 
J'ai été sidéré de voir à quelle point le mécanisme de base était contre-performant. C'est probablement l'un des plus beaux ratés de PHP.


---------------
Directeur Technique (CTO)
n°2186717
NewsletTux
<Insérez ici votre vie />
Posté le 20-04-2013 à 00:09:10  profilanswer
 

CyberDenix a écrit :

J'ai eu le même problème le jour où j'ai voulu réaliser un formulaire de multi-upload d'images (genre 100 à la fois).

 

J'avais AJAXifié et asynchronisé à mort mon code, mais rien à faire, mon serveur n'uploadait un fichier à la fois.

 

C'est alors que je me suis créé une classe Session ouverte en readonly par défaut : non seulement mes uploads se sont faits en parallèle, mais en plus cette approche s'est révélée 400x plus performante que la session de base en PHP.

 

J'ai été sidéré de voir à quelle point le mécanisme de base était contre-performant. C'est probablement l'un des plus beaux ratés de PHP.


Hello

 

Ca m'intéresse par curiosité, tu as un exemple de code  ?


---------------
NewsletTux - outil de mailing list en PHP MySQL

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] multitasking / multithreading en PHP ?

 

Sujets relatifs
Sécuriser son code source PHP avec Bcompiler ou un autre encodeur[PHP et HTML] Mettre une varial PHP lors d'un click d'un bouton HTML.
Exécution script Powershell via PHPRenvoi de Javascript avec PHP [Résolu]
Formulaire de recherche avec champs vides en PHPinnertHML et variable de session PHP
Transfert de paramètres en PHP ![PHP]paramètre pas fonctionnel dans une fonction
Contraintes Choco et PHPproblème script PHP
Plus de sujets relatifs à : [PHP] multitasking / multithreading en PHP ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR