Как я могу запустить несколько PHP-скриптов из другого PHP-скрипта, например пакетного файла? Я не думаю, что включение будет работать, если я понимаю, что включает в себя; потому что каждый из файлов, которые я запускаю, обновит некоторые из тех же функций и т. д. Я хочу, чтобы каждый новый скрипт PHP, как будто он был в чистом, свежем стеке, без знания переменных, функций и т. д., что перед ним.
Обновление : я должен был упомянуть, что сценарий работает в Windows, но не на веб-сервере.
Вы можете использовать функцию exec () для вызова каждого скрипта в качестве внешней команды.
Например, ваш скрипт мог бы сделать:
<?php exec('php -q script1.php'); exec('php -q script2.php'); ?>
У Exec есть некоторые проблемы безопасности, связанные с этим, но похоже, что это может сработать для вас.
// использовать 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'); ?>
В прежние времена я делал что-то вроде создания набора фреймов, содержащего ссылку на каждый файл. Вызовите набор фреймов, и вы вызываете все сценарии. Вы можете сделать то же самое с iframe или с ajax в наши дни.
exec () – это прекрасная функция для использования, но вам придется подождать до завершения процесса, чтобы продолжить работу с родительским скриптом. Если вы выполняете пакет процессов, где каждый процесс занимает немного времени, я бы предложил использовать popen ().
Переменная, которую вы получаете, создает указатель на канал, который позволяет вам проходить через несколько процессов за один раз, сохраняя их в массиве, а затем получая их все с последовательной скоростью после того, как все будет готово (гораздо более параллельно), используя steam_get_contents ().
Это особенно полезно, если вы вызываете API-вызовы или запускаете сценарии, которые не могут быть интенсивными в памяти или интенсивными с точки зрения вычислительной мощности, но требуют значительного ожидания завершения каждого из них.
Если вам нужны какие-либо результаты возврата из этих сценариев, вы можете использовать system
функцию.
$result = system('php myscript.php'); $otherresult = system('php myotherscript.php');