Как я могу запустить несколько скриптов PHP из скрипта PHP (например, командный файл)? - PullRequest
7 голосов
/ 21 мая 2009

Как я могу запустить несколько PHP-скриптов из другого PHP-скрипта, например, пакетного файла? Я не думаю, что include будет работать, если я пойму, что делает include; потому что каждый из файлов, которые я запускаю, будет переименовывать некоторые из тех же функций и т. д. Я хочу выполнить каждый новый скрипт PHP, как будто он находится в чистом, свежем стеке, без знания переменных, функций и т. д., которые до этого.

Обновление : я должен был упомянуть, что скрипт работает в Windows, но не на веб-сервере.

Ответы [ 4 ]

10 голосов
/ 21 мая 2009

Вы можете использовать функцию exec () для вызова каждого сценария как внешней команды.

Например, ваш скрипт может сделать:

<?php

exec('php -q script1.php');
exec('php -q script2.php');

?>

В Exec есть некоторые проблемы с безопасностью, но похоже, что он может работать на вас.

6 голосов
/ 21 мая 2009

// использовать exec http://www.php.net/manual/en/function.exec.php

<?php

exec('/usr/local/bin/php somefile1.php');
exec('/usr/local/bin/php somefile2.php');

?>

В старые времена я делал что-то вроде создания набора фреймов, содержащего ссылку на каждый файл. Вызовите набор фреймов, и вы вызываете все сценарии. Вы можете сделать то же самое с iframes или с ajax в эти дни.

3 голосов
/ 21 мая 2009

Если вам нужны какие-либо результаты возврата из этих сценариев, вы можете использовать функцию system.

$result = system('php myscript.php');
$otherresult = system('php myotherscript.php');
3 голосов
/ 21 мая 2009

exec () - прекрасная функция для использования, но вам придется подождать до завершения процесса, чтобы продолжить работу с родительским скриптом. Если вы делаете пакет процессов, где каждый процесс занимает немного времени, я бы предложил использовать popen ().

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...