/ / php script plus long que le temps d'exécution maximum (barre de progression) - php, mysql, run-time

script php plus long que le temps d'exécution maximal (barre de progression) - php, mysql, run-time

Je travaille actuellement sur un petit projet, où certainsles données sont recueillies à partir du Web et le système crée des relations entre celles-ci. Bien sûr, ce n’était pas parfait au début, j’avais donc besoin de créer un script qui mette à jour toutes les connexions et les relations avec les scripts mis à jour que j’ai créés.

En gros, le script fonctionne, mais comme il y aura un beau moteur par la suite, ce n’est pas vraiment ce que je veux.

Le script nécessite environ 10 minutes et parce que jeJe ne voulais pas juste configurer le max_execution_time de php, j'ai pensé à une autre méthode. Au lieu de charger 1000 entrées SQL à la fois, je l'ai réduit à 200 à la fois et je le répète avec les 200 suivants à la fin du premier tour. Par conséquent, j'ai utilisé php http_request. Je viens de vous montrer une version allégée du script:

require_once "HTTP/Request.php";
$max = $db->query("SELECT COUNT(id) as max FROM db_table");
$lower = $_POST["lower"] ? $_POST["lower"] : 0;
$plus = 250;
$entries = $db->query("SELECT * FROM db_table LIMIT {$lower},{$plus}");

foreach($entries as $entry){
DO SOME STUFF TO UPDATE THE RELATIONS BETWEEN THE DATA
}

$lower = $lower + $plus;

if($lower <= $max) {
$request = new HTTP_Request("path to the script");
$request->setMethod(HTTP_REQUEST_METHOD_POST);
$request->addPostData("lower", $lower);
$result = $request->sendRequest();
}

Ça y est. Comme je l’ai dit, cela fonctionne, car c’est une nouvelle requête qui ne soit pas affectée par max_execution_time. Mais le navigateur ne fait que charger et charger et charger et après un certain temps, il se termine. Mais bien sûr, je ne peux pas afficher de données actualisées pour quelque chose comme une barre de progression.

J'ai vu beaucoup d'entrées utilisant php flush (), mais çane fonctionnait pas pour moi à cause de la manière (je suppose) stupide que j'avais l'habitude de résoudre mon problème. Comment feriez-vous cela si vous devez installer quelque chose sur un espace Web et que vous n'avez pas la possibilité de changer le temps d'exécution maximum ou d'installer http_request?

Comme je l'ai dit, cela devrait ressembler à une barre de progression plus tard. Je suppose que je dois utiliser ajax, et simplement pousser le tour du script à chaque tour et mettre à jour la barre de progression via javascript.

Pouvez-vous m'aider?

Réponses:

0 pour la réponse № 1

Vous avez toujours des problèmes avecmax_execution_time, car la page que vous avez demandée au navigateur Web est toujours active, elle ne se termine pas avant la fin de la requête HTTP. Essayez de localiser la page sur une autre avec le paramètre low.

header("Location: myscript.php?lower=$lower");