Передача выполнения другому скрипту при запуске по крону, сессии

  • Автор темы Автор темы asmdk
  • Дата начала Дата начала

asmdk

Новичок
Допустим есть 2 скрипта, first.php и second.php. Они содержат следующий код:
first.php
PHP:
<?php

$iid = isset($_GET['iid']) ? $_GET['iid'] : 1;
$iid++;
header("Location: second.php?iid=$iid");

?>
код файла second.php
PHP:
<?php

$iid = isset($_GET['iid']) ? $_GET['iid'] : die('wrong iid');
if ($iid < 10) {
  header("Location: first.php?iid=$iid");
}
echo 'iid complete';

получается мы запускаем в браузере first.php, скрипты обмениваются информацией пока иид не станет больше или равно 10, после этого завершается выполнение скриптов. все работает, но если запустить скрипт камандой(из командной строки) php -f first.php, соответственно там header не работает, чем можно его заменить или как поступить в таком случае?
 
Код:
return shell_exec('php -f second.php -d register_argc_argv=1 -- "action=aaa&iid=7" > /dev/null 2>&1 &');
PHP:
global $argv;
$url = $argv[1];
$url = urldecode($url);
parse_str($url, $_GET);

Если я правильно понял вопрос.
 
наверное что-то похожее как я понял php код заносит в $_GET все переданные параметры, а что такое > /dev/null 2>&1 &, какой -то лог или что-то еще?
я думаю это то что нужно чуть позже проверю))
спс)
 
спс, заменил все работает появилась еще одна проблема с сессиями:

вся фишка в том что этот скрипт должен запускать импорт на цмс, т е делать например курл запрос на определенный адрес, но сама цмс устроена таким образом что запрос запустит одну итерацию импорта, скажем импортнет 10 товаров, а их всего например 1000, соответственно нам надо сделать 100 запросов. изначально все было написано через циклы, но позже пришлось переделать...

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

PHP:
$session_id = 'coc84u9tdcov3r4ao28ctgmsa1';

session_id($session_id);
session_start();

ну ид соответственно передается скриптом и он правильный и точно передается это проверено, сами сессии при запуске из браузера работают, а из командной строки нет, знает кто как их получить?
 
PHP:
session_save_path('/var/www/site/session');
session_id($session_id);
session_start();

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

может есть како вариант например как запустить скрипт от определенного пользователя, тогла наверное он сразу сессии там где надо смотреть будет? или узнать где хранятся сессии для опр пользователя, чтобы повысить уникальность скрипту, не вводить путь к сессиям вручную...
 
Не, дальше сам. Особо я не разбирался, мне хватает кода из первого ответа.
У меня работает от имени одного пользователя (www-data), сессиями не пользуюсь.
 
Что мешает сделать всё curl'ом? Только учитывайте, что во многих браузерах есть лимит перехода по Location (в cURL в том числе), и постарайтесь избавиться от подобных извращений как можно скорее.
 
и постарайтесь избавиться от подобных извращений как можно скорее.
там у меня все и сделано курлом, просто не в цикле, а через два файла, так как на самом деле там все сложнее и лучше было бы так делать)
получается в одном файле курл запрос, который после выполнения перенаправляет на второй файл, а во втором проверка завершился ли импорт, если нет он опять перенаправляет на курл, если да, то выполнение останавливается.

еще вопрос при таком подходе лимин на выполнение скрипта по времени, действует на каждый вызов отдельно или общий?
 
ну как какой, "max_execution_time"
ну методом тестирования я уже понял что отделный или не учитывается вооще...
 
Это то тут при чём? В консоли его вообще можно поставить = 0 и не морочиться.
 
Сверху