4 votes

Exécuter un PHP-script depuis un PHP-script sans blocage

Je suis en train de construire une araignée qui va parcourir différents sites et les exploiter.

Comme je dois récupérer chaque page séparément, cela pourrait prendre un temps TRÈS long (peut-être 100 pages). J'ai déjà défini le set_time_limit à 2 minutes par page mais il semble qu'apache tuera le script après 5 minutes peu importe.

Ce n'est généralement pas un problème puisque l'opération sera exécutée à partir de cron ou de quelque chose de similaire qui n'a pas cette limite de temps. Cependant, j'aimerais également que les administrateurs puissent lancer une extraction manuellement via une interface HTTP.

Il n'est pas important qu'Apache soit maintenu en vie pendant toute la durée de l'opération, je vais utiliser AJAX pour déclencher une récupération et vérifier de temps en temps avec AJAX.

Mon problème est de savoir comment lancer la récupération à partir d'un script PHP sans que la récupération soit interrompue lorsque le script qui l'appelle meurt.

Je pourrais peut-être utiliser system('script.php &') mais je ne suis pas sûr que cela fasse l'affaire. Avez-vous d'autres idées ?

6voto

Erik Points 12282
    $cmd = "php myscript.php $params > /dev/null 2>/dev/null &";

    # when we call this particular command, the rest of the script 
    # will keep executing, not waiting for a response
    shell_exec($cmd);

Ce que cela fait, c'est envoyer tous les STDOUT et STDERR vers /dev/null, et votre script continue de s'exécuter. Même si le script 'parent' se termine avant myscript.php, myscript.php finira de s'exécuter.

1voto

Ronan Dejhero Points 1583

Si vous ne voulez pas utiliser exec, vous pouvez utiliser une fonction intégrée de php !

ignore_user_abort(true);

ceci indiquera au script de reprendre même si la connexion entre le navigateur et le serveur est interrompue ;)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X