Задать вопрос
Anonym
@Anonym
Программирую немного )

Рекурсивный запуск PHP скриптов?

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


Чтобы было яснее, приведу пример.

Пусть имеется список изображений (вида id — filepath), которые нужно обработать. Мы вызываем скрипт a.php с параметром id первого изображения, например a.php?id=1. Скрипт обрабатывает одно изображение и вызывает сам себя, но с параметром id следующего изображения, например a.php?id=2, а сам умирает. Возможно ли реализовать такую систему?
  • Вопрос задан
  • 7956 просмотров
Подписаться 7 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 7
В этом вопросе тоже поднимали вопрос запуска некой задачи в php отдельным процессом:
Ответ написан
Cheese
@Cheese
если под «обработкой» не подразумевается их вывод, то достаточного что-то типа такого:
//обращение к a.php?id=0
//обработка картинки с id=0
$id=$_GET['id'];
$id++;
header(«Location: site.ru/a.php?id=$id»);
Ответ написан
UJey
@UJey
А не подойдет ли CRON для этих целей?

Если известно примерное время обработки одной картинки, то лучше настроить выполнение скрипта по крону каждые N минут. Сам php-скрипт получает следующую картинку и приступает к обработке, после чего отмечает данную «задачу» как выполненную и завершается.
Ответ написан
UJey
@UJey
Вот еще есть вариант, который, наверное, не во всех случаях поможет, но все же приведу его…

Если это применимо, делается html-страница, на которой ajax'ом отправляется запрос к php-скрипту на сервере. После возвращения успешного ответа делаем паузу и отправляем запрос еще раз. И так далее.

Я так делал составления Sitemap для своего сайта.

Требования: загрузка изначальной html-страницы в броузере
Ограничение: максимальное выполнение выполнение php-скрипта (в настройках сервера).
Ответ написан
@Nc_Soft
Что вы делаете с изображениями? Я думаю можно обойтись без извратов.
А чтобы вызвать php из консоли с параметром нужно в начале скрипта писать так

if ($argc > 0) {
  for ($i=1; $i < $argc; $i++) {
    parse_str($argv[$i], $tmp);
    $_REQUEST = array_merge($_REQUEST, $tmp);
  }
}

и вызывать так
exec("/usr/bin/php /var/www/c.php id=1 > /dev/null &");
Ответ написан
Комментировать
AFoST
@AFoST
Как вариан еще в конце выполнения скрипта с a.php?id=1 отправь get/post http-запрос на скрипт с a.php?id=2.
Ответ написан
Комментировать
LoneCat
@LoneCat
Под апачем можно воспользоваться virtual, который выполняет апачевские подзапросы, но тут жесткая завязка от апача, для других серверов можно сэмулировать эту функциональность делая внешний запрос (через curl, socket'ы, да хотя-бы file_get_contents), ну и чтобы один скрипт не ждал завершения другого первый после запроса жестко прерывать, а во втором установить ignore_user_abort
А если не секрет, зачем вам такие хитрые изыски?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы