scénario: p>
Quelle est la meilleure façon de faire cela? p>
5 Réponses :
Il n'y a pas de filetage dans PHP. Vous pouvez tricher en renvoyant une page HTML qui déclenche un appel AJAX pour démarrer le processus lourd dans une nouvelle demande. Mais si c'est partagé l'hébergement, je suppose que vous allez rapidement toucher les limites de la mémoire, du temps ou de l'utilisation de la CPU imposée par votre fournisseur d'hébergement. P>
Evidemment, il existe des threads dans PHP maintenant mais vous devrez peut-être avoir à < Un href = "http://docs.php.net/manual/fr/pthreads.Installation.php" rel = "nfollow noreferrer"> Installez-les . Cependant, je viens juste d'apprendre cela ce soir, alors je ne l'ai pas encore essayé.
sur * NIX: sous Windows: p> $WshShell = new COM('WScript.Shell');
$oExec = $WshShell->Run('C:\path\to\executable.exe', 0, false);
Puis-je modifier le / dev / null en un fichier journal de mon choix?
Je pense que oui, tant que vous redirigez stdout et i> stardr à quelque part qui n'est pas le processus parent et suffixez avec & code>, cela devrait fonctionner. Tbh, j'ai toujours juste juste
/ dev / null code> ed it, donc vraiment vous devrez juste le sucer et voir ...
Démarrer un processus externe arbitraire sur l'hébergement partagé? Bonne chance avec ça.
@Jbnizet Je peux commencer les scripts PHP externes sur les miens exactement comme ci-dessus, et ils vont réellement courir, je pense pour toujours - j'avais une course pendant plus d'une semaine comme une expérience une fois.
Wow. Tu es beaucoup plus chanceux que moi alors :-)
var_dump($argv);
Vous pouvez utiliser Google par clé: PHP Continuer le traitement après la fermeture de la connexion.
Les liens suivants qui concernent votre problème sont les suivants: p>
Vous pouvez utiliser une commande appartenante pour continuer à exécuter sans l'utilisateur d'abandonner p> vous utilisez fastcgi_finish_request pour alerter le client pour arrêter la sortie de réponse. Et vos scripts continueront d'être exécutés. P> Exemple: p>
Bienvenue à cela. Vous devriez examiner le formatage de votre réponse. Dès maintenant, il semble que vous mettions tout dans un bloc de code, alors qu'il y a une partie de votre réponse qui n'est pas du code.
Pour compléter @ Daverandom's Réponse: Vous n'avez pas réellement Vous devez rediriger Cela ne signifie pas que vous devez rediriger vers Utiliser En utilisant ce qui précède pour démarrer le script qui déclenche les processus enfants, tout ce que STDOUT code> à
stdout code> (avec
2> et 1 < /Code >).
stdout code> si vous souhaitez empêcher le processus parent de suspendre l'attente de l'enfant à la fin. Ceci est requis cause
EXEC code> retournera la dernière ligne de la sortie du processus enfant, il doit donc attendre que le
stdout de l'enfant code> soit fermé. P>
/ dev / null code>. Vous pouvez la rediriger vers un autre fichier, voire à un autre descripteur de fichier (comme
starr code>:
1> & 2 code>). P>
EXEC ('/ chemin / à / à / exécutable') code>: Démarrera un nouveau processus et attendra la fin de la fin (c'est-à-dire bloquer le processus parent). LI>
EXEC ('/ chemin / à / exécutable &') code>: essentiellement identique à ce qui précède. li>
$ pid = EXEC ('/ chemin / à / exécutable> / dev / null & echo $!') CODE>: Démarrera un processus en arrière-plan, avec les processus enfant et parent en parallèle . La sortie de
/ chemin / à / exécutable code> sera supprimée et
$ pid code> recevra le PID du processus d'enfant. LI>
ul>
2> & 1 code> n'est pas nécessaire, Cause
EXEC code> ignore le
starr code> du processus enfant. C'est également probablement indésirable car il rendra plus difficile de trouver des erreurs, car ils seront juste jetés silencieusement. Si vous omettez
2> & 1 code>, vous pouvez tuyer le
starr code> du processus parent sur un fichier journal, qui peut être vérifié plus tard lorsque quelque chose ne va pas: P> < Pré> xxx pré>
script.php code> et strong> tout processus enfant écrit sur < Code> stardr code> sera écrit dans le fichier journal. p> p>
PHP ne peut pas (actuellement) être multi-fileté. beaucoup i> à mon mécontentement régulier.
Eh bien, certaines choses peuvent être émulées.