Question

J'ai un script php qui vérifie les mises à jour sur plusieurs (milliers) de sites. De temps en temps (plus souvent à mesure que le nombre de sites augmente), je reçois un délai d’exécution lors de la mise à jour de l’un de ces sites, et le script dans son intégralité se perd.

La meilleure idée que je puisse proposer est de créer chaque mise à jour. Par conséquent, si elle se termine, la mise à jour globale se poursuit. D'après ce que j'ai compris, il semble que les threads PHP ne soient pas fiables, en particulier sur une plate-forme Windows (sur laquelle je dois malheureusement travailler).

J'ai envisagé d'utiliser curl comme mécanisme de forking, mais cela ne sera-t-il pas beaucoup plus coûteux pour le serveur (en temps et en puissance de traitement)?

Je serais heureux d'entendre quelques idées et expériences sur le PHP forking / threading ...

merci, Omer.

Était-ce utile?

La solution 5

Eh bien, à la fin, j’ai opté pour le curl, et cela fonctionne très bien.

J'avais besoin d'une solution multiplate-forme, car je développe sur un Mac alors que dans ce cas, le sereur de production est Windows. Cela signifiait que pcntl était hors de question.

Je craignais que l'envoi de milliers de demandes de bouclage à mon propre serveur risquait de le gêner et de gêner les utilisateurs du site à ce moment-là, mais je me suis trompé.

Cependant, j’ai dû ajouter un set_time_limit (0) au script qui lance tous les appels curl, sinon le délai est expiré.

Autres conseils

Si vous envisagez d’utiliser cURL, consultez la famille de méthodes multi * qui vous permet de rationaliser cURL et d’interagir avec un ensemble de sites. Cela étant dit, vous pouvez également définir votre temps d'exécution maximal (via ini_set) sur un nombre arbitrairement élevé et / ou conserver votre propre compteur de surveillance afin que vous ne le laissiez jamais devenir trop élevé.

Mais oui, au final, nous allons rencontrer des problèmes et le manque de prise en charge complète des threads en PHP. Votre meilleur choix est donc d’examiner d’autres solutions, par exemple. autres langues / plates-formes prenant en charge le threading natif.

J'ai réussi à obtenir une certaine forme de threading dans php en utilisant l'extension pcntl. Ce n'était pas la meilleure des solutions, mais cela a fonctionné.

http://www.php.net/manual/en/ref .pcntl.php

essayez aussi les liens suivants, ils m'ont donné une idée de la mise en oeuvre.

http://www.van-steenbeek.net/?q=php_pcntl_fork

http://www.hudzilla.org/phpbook/read.php/16_1_3

http://www.electrictoolbox.com/article/php/process- forking /

J'espère que cela aide, mais php n'est pas très bon avec les threads.

Vous pouvez définir la directive ini < code> max_execution_time à 0. Cela devrait supprimer le temps d'exécution maximal et permettre au script de s'exécuter sans que cette erreur ne se produise. Cette valeur doit cependant être définie dans votre fichier php.ini - l'utilisation de ini_set ne fonctionne pas.

set_time_limit(0);

docs set_time_limit

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top