Выполнение команд MPI с помощью PHP

Я пытаюсь выполнить программу mpi, используя php, так как я должен предоставить веб-интерфейс пользователю. PHP успешно выполняет команду и возвращает вывод только если у меня есть только один процесс, т.е.

$output = system(" mpiexec -hostfile /data/hosts -np 1 /data/./hello",$returnValue);

Но мне нужно более одного процесса, и я пробовал следующие способы, но результаты такие же, т.е. Нет ответа от программы mpi.

Всегда загружается, но нет ответаиспользуя system()

$output = system(" mpiexec -hostfile /data/hosts -np 2 /data/./hello",$returnValue);

используя shell_exec()

$output = shell_exec(" mpiexec -hostfile /data/hosts -np 2 /data/./hello");

Если я использую эти методы для запуска простой программы на C, я получаю ответ.

$output = system("/data./hello",$returnValue);

Пожалуйста, помогите мне. Большое спасибо.


person mshahbazm    schedule 04.06.2015    source источник
comment
согласно документации для exec, вам необходимо отключить safe_mode, чтобы запускать любые исполняемые файлы за пределами safe_mode_exec_dir. Может быть, mpiexec находится за пределами safe_mode_exec_dir?   -  person Cashew    schedule 19.06.2015
comment
То же самое относится и к system(). Однако сам shell_exec() отключается, когда включен безопасный_режим. Проверьте, включен ли параметр safe_mode.   -  person Cashew    schedule 19.06.2015


Ответы (1)


Похоже, проблема в том, что вы пытаетесь сохранить вывод «system ()» в «$ output», в то время как он уже сохраняет значение в «$ returnValue». Попробуй это:

exec('mpiexec -hostfile /data/hosts -np 2 /data/./hello', $var);
var_dump($var);

По какой-то странной причине PHP не ладит с несколькими потоками.

Грязным обходным путем будет вывод результата в файл и передача php из этого файла, что-то вроде:

system(" mpiexec -hostfile /data/hosts -np 2 /data/./hello > myfile.txt 2>&1");
$handle = file_get_contents('myfile.txt');
person Solrac    schedule 15.06.2015
comment
Спасибо за ваш ответ. Эта приведенная выше команда ничего не записывает в файл, даже если я использую один поток. - person mshahbazm; 17.06.2015
comment
Первая попытка заключалась только в перенаправлении stdout, я отредактировал ответ и добавил также перенаправление stderr :) - person Solrac; 17.06.2015
comment
У меня точно так же, как вы сказали мне, но это не работает. - person mshahbazm; 22.06.2015
comment
myfile.txt пусто? - person Solrac; 23.06.2015
comment
Вы используете это на Windows или Linux? Эта команда должна перенаправлять весь вывод в myfile.txt, если вывод не создан вторым процессом... Вы можете попробовать выполнить mpiexec -hostfile /data/hosts -np 2 /data/./hello > myfile.txt 2>&1 на терминале и посмотреть, выводит ли он что-нибудь... - person Solrac; 02.07.2015
comment
Привет, спасибо, я изменил язык, как вы упомянули, что у PHP есть некоторые проблемы с многопоточностью. - person mshahbazm; 08.07.2015