Я пытаюсь выполнить скрипт perl из скрипта php. У меня это работало с использованием различных методов, таких как exec, popen и proc_open, но у меня есть пара проблем, на которые старый добрый Google не дает мне ответов.
Мне нужно запустить скрипт .pl (передавая одну переменную скрипту, который является числом) из файла php, но не позволяя сценарию php ждать, пока не завершится .pl (вероятно, файл .pl займет 4 -5 часов работы на сервере). Я не ожидаю каких-либо возвращаемых результатов от сценария perl (сценарий perl записывает свой вывод в базу данных mysql), поэтому мне просто нужно, чтобы он был запущен на сервере и позволил сценарию php продолжить работу.
Существуют некоторые барьеры, которые необходимо преодолеть, поскольку он работает на компьютерах с Windows, работающих под управлением apache, php, mysql.
Я думаю, что видел решение для Linux, но оно должно оставаться на компьютере с Windows.
Я сейчас пытаюсь использовать метод proc_open, используя следующий код (35 в строке proc_open - это идентификатор теста, который мне нужно передать в скрипт perl):
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","./error.log","a")
) ;
proc_close(proc_open('perl perlscript.pl 35', $descriptorspec, $pipes));
$i = 0;
while ($i < 1000) {
echo ++$i;
}
Теперь этот код выполняет сценарий perl, но размещенный после него цикл while, помещенный после него (только для тестирования), никогда не выполняется (я не ждал, пока завершится сценарий perl, чтобы выяснить, выполняет ли он), поскольку он должен ожидать. PL до конца.