504 через 120 секунд

у меня есть этот код

$url="site.com";//~
$opts=array(
    'http'=>array(
        'method'=>"GET",
        'header'=>"Accept: */*i\r\n".
              "User-Agent: Your application name\r\n",
        "ignore_errors" => true,
        "timeout" => 1800
    ),
    "ssl"=>array(
        "allow_self_signed"=>true,
        "verify_peer"=>false,
        "verify_peer_name"=>false,
    )
);
$page = file_get_contents($url, false, stream_context_create($opts));
...
...

Если $url (веб-страница) небольшого размера - скрипт работает хорошо.

Но когда размер большой, а время работы начинает превышать 120 секунд -

процесс будет прерван и отображается 504 ERROR.

--

В начале скрипта добавляю:

ini_set('max_execution_time',18000);
ini_set('default_socket_timeout',18000);
ignore_user_abort(true);
ini_set('memory_limit','512M');

В ini.php я добавляю следующее:

max_execution_time = 18000;
max_input_time = 18000;

Но ничего не помогает.

Вопрос: Как увеличить время выполнения скрипта до 120 секунд?

PS: Все вышеперечисленное (max_execution_time, ...) изменилось в соответствии с указанными целочисленными значениями (как видно из phpinfo()). Но параметры realpath_cache_size и realpath_cache_ttlphpinfo() написано, что равно 120) не меняются. Может проблема в этом?


person Vigen Cholakyans    schedule 06.10.2018    source источник
comment
Вы запускаете это через Nginx? Кроме того, realpath_cache_size не имеет ничего общего со временем выполнения.   -  person Magnus Eriksson    schedule 06.10.2018
comment
Нет, через апач.   -  person Vigen Cholakyans    schedule 06.10.2018
comment
Но realpath_cache_ttl может сделать что-то php.net/manual /en/ini.core.php#ini.realpath-cache-ttl   -  person Vigen Cholakyans    schedule 06.10.2018
comment
Нет, это что-то совсем другое. Это не имеет ничего общего с тайм-аутом выполнения.   -  person Magnus Eriksson    schedule 06.10.2018


Ответы (1)


Ваш код работает до тех пор, пока вы его установили, на самом деле, если вы просто добавите в начало своего кода

       set_time_limit(0);

Это не остановится до конца. Однако, если вы хотите продолжать ждать вывода, вам необходимо установить ограничение времени ожидания Apache2, а также ограничение времени ожидания вашего браузера.

person Zack Heisenberg    schedule 06.10.2018
comment
Про set_time_limit(0) забыл написать, тоже пробовал. - person Vigen Cholakyans; 06.10.2018
comment
Предельное время ожидания Apache по умолчанию составляет 300 секунд. 2.0/mod/core.html#timeout , а лимит времени ожидания моего браузера также равен 300 cs.chromium.org/chromium/src/net/socket/ - person Vigen Cholakyans; 06.10.2018