Длинный PHP-скрипт неожиданно перезапускается - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть PHP-скрипт, который я вызываю с помощью команды $ .ajax () Javascript:

$.ajax({
    type: "POST",
    url: "/myscript.php",
    data: $("#my-form").serialize()
});

myscript.php (суммировано)

class myclass{
    public function __construct(){
        $i = 0;
        while($i < $_POST['some_user_defined_var']){
            //$_POST['some_user_defined_var'] = 100
            $this->do_something();
        }
    }
    private function do_something(){
        //this function takes about 1 hour to run
    }
}
new myclass;

myscript.php занимает около4 дня для бега.Я заметил, что примерно через 20-28 часов скрипт неожиданно перезапустится с самого начала.Переменная $ i сбрасывается в 0, и сценарий запускается.Есть ли php.ini или другой параметр, который вызывает перезапуск моего скрипта?

1 Ответ

0 голосов
/ 03 декабря 2018

Если все ваши тайм-ауты и время выполнения достаточно велики и ignore_user_abort равно true, то ваша проблема в том, что $i не увеличивается.См. Ниже:

class myclass{
    public function __construct(){
        $i = 0;
        while($i < $_POST['some_user_defined_var']){
            //$_POST['some_user_defined_var'] = 100
            $this->do_something();

            ++$i; // <-- increment your counter.
        }
    }
    private function do_something(){
        //this function takes about 1 hour to run
    }
}
new myclass;

В целом, что-то вроде этого определенно будет лучше подходить в качестве задания CRON / запланированной задачи.Если вам нужно, чтобы это было активировано пользователем, я предлагаю использовать комбинацию CRON и хранилища базы данных, чтобы пользовательское действие могло создать запись в БД, а задание CRON могло просто искать запись и действовать по ней.

96-часовой HTTP-запрос абсолютно абсурден.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...