PHP: Почему сессия, созданная session_start(), умирает раньше, чем срабатывает крон (раз в час), несмотря на session.gc_maxlifetime = 100000

Паршу выдачу поисковика. запросы запускаю в цикле:

foreach ($tmp as $key => $value)

Так как в час, в связи с лимитами, могу перебрать только малую долю заголовков, вынужден сохранять $key в сессию, а потом, при каждом запуске скрипта по крону обрезать массив интересующих заголовков на значение $key, чтобы в очередной раз работа стартовала с того, чем кончилась в прошлый раз.

$tmp = array_slice($matches[0], $_SESSION["time"], -1, true);

$_SESSION["time"] = $key;

К сожалению, при запуске через крон раз в час скрипт забывает сессию и пишет в файл docx все, что уже ранее запрашивал у поисковика:

введите сюда описание изображения

Прочитал в интернете, что срок жизни сессии в PHP по умолчанию 20 минут и увеличил в Open Server значение session.gc_maxlifetime до такого session.gc_maxlifetime = 100000.

Не помогло, скрипт все также отрабатывает. Но, может, дело не в этом вообще? А в том, что Крон запущен так:

W:\modules\wget\bin\wget.exe -q --no-cache http://localhost/par.php

Я запускал скрипт вручную через браузер не уверен, что с промежутком в час и больше, но все отрабатывало.. Он запрашивал уже новые заголовки. Помогите, пожалуйста, более опытные специалисты! Буду признателен за любой совет...


Ответы (1 шт):

Автор решения: teran

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

чтобы сессия подхватывалась необходимо знать ее идентификатор. Когда сервер стартует сессию, он записывает ее ID в куки, и так он и пересылается туда-обратно с каждым запросом. Когда вы делаете wget запрос, то никуда не сохраняете куки и не используете их при следующем запуске. Поэтому ничего у вас не сохраняется.

Теперь к основной проблеме. wget тут - костыль. Все что вам надо - запускать пхп скрипт напрямую из консоли php.exe path/to/par.php. Состояние вместо сессии можете сохранять в файлах/кэше/БД.

→ Ссылка