Рестарт php-скрипта

27.09.2016  12:54

Задача:
Стандартная «засада» — лимит на выполнение php-скрипта на сервере 30 секунд. Хорошо, если у вас есть возможность это значение увеличить (в панели хостера или в конфиге php.ini, или в самом скрипте прописать:
set_time_limit(0);
ini_set('max_execution_time', '3600');
). А если нет? Приехали. Приходится выдумывать костыли и велосипеды.

Решение:
перезапускать php-скрипт яваскриптом. Например так:
function getdata(id) {
	var lnk = '/scripts/import_test.php';
	$.post(lnk, { id: id }, function(data) {
	$("#main").append(data.res + '
'); var idcur = parseInt(data.id); if (idcur < 10) { getdata(data.id);//restart current function (recursion) } else { $("#main").append('fin---
');//finish! } }, "json"); } $(document).ready( $(function() { var lnk = '/scripts/import_test.php';//first iteration var id_current = 1; getdata(id_current); }));

PHPшная часть:
$id = $_REQUEST['id'];
/*
something operations
*/
$id++;
$out = $id.' - ok';//debug variable
$array = array("id" => $id, "res" => $out);
echo json_encode($array);
exit;


Т.е. всё по-педальному просто: яваскрипт 9 раз (от 1 до 10) вызывает php-скрипт, а php при каждом обращении увеличивает счётчик.

Есть и другие решения, например редиректить на тот же самый скрипт, меняя счётчик в урле: import_test.php?id=2 (след. итерация id=3 и т.д.), но современные браузеры такую хитрожопость стали пресекать и редирект блокируется итерации на десятой, поэтому и было придумано вышеописанное решение.

Рабочий пример


перейти в Блог | Блог (стр. 7)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): JavaScript 24  PHP 52  web-программирование 76  молодым домохозяйкам 44  

Вам есть что сказать — ну я же чую.
Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)