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

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 не работает, чем можно его заменить или как поступить в таком случае?
 

riff

Новичок
Код:
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);
Если я правильно понял вопрос.
 

asmdk

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

asmdk

Новичок
спс, заменил все работает появилась еще одна проблема с сессиями:

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

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

PHP:
$session_id = 'coc84u9tdcov3r4ao28ctgmsa1';

session_id($session_id);
session_start();
ну ид соответственно передается скриптом и он правильный и точно передается это проверено, сами сессии при запуске из браузера работают, а из командной строки нет, знает кто как их получить?
 

riff

Новичок
PHP:
session_save_path('/var/www/site/session');
session_id($session_id);
session_start();
 

asmdk

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

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

riff

Новичок
Не, дальше сам. Особо я не разбирался, мне хватает кода из первого ответа.
У меня работает от имени одного пользователя (www-data), сессиями не пользуюсь.
 

AnrDaemon

Продвинутый новичок
Что мешает сделать всё curl'ом? Только учитывайте, что во многих браузерах есть лимит перехода по Location (в cURL в том числе), и постарайтесь избавиться от подобных извращений как можно скорее.
 

asmdk

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

еще вопрос при таком подходе лимин на выполнение скрипта по времени, действует на каждый вызов отдельно или общий?
 

AnrDaemon

Продвинутый новичок
Какой лимит, какого скрипта, по какому времени?...
 

asmdk

Новичок
ну как какой, "max_execution_time"
ну методом тестирования я уже понял что отделный или не учитывается вооще...
 

AnrDaemon

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