Запустите внешнюю программу с php - PullRequest
0 голосов
/ 28 марта 2011

У меня проблема с php! я хочу запустить внешнюю программу с php. Эта программа работает в командной строке и на платформе Linux. так что, должно быть, все работает нормально. но я стараюсь больше времени и не могу его запустить. так что не так! это ссылка на программу: http://www.lalescu.ro/liviu/fet/ и эта команда прекрасно работает в командной строке, а не в php:

./fet --inputfile=Hopwood.fet --outputdir=out

и это код php:

<?php
`./fet --inputfile=Hopwood.fet --outputdir=out`
?>

Я надеюсь решить эту проблему. заранее спасибо ..

Обновление Я загружаю исполняемую программу и файл Hopwood.fet, чтобы вы попробовали ее. это ссылка: http://rapidshare.com/files/454756427/fet.tar.gz

Ответы [ 4 ]

2 голосов
/ 28 марта 2011

попробуйте сделать это по полному пути:

/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out

так что в итоге вы выполните:

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out");

Кроме того, убедитесь, что запущенный процесс имеет возможность записи в ваш /path/to/your/out

UPDATE

Чтобы было понятнее, попробуйте выполнить следующую команду:

exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 2> /tmp/fet.error.log", $output, $status);

echo "status: " . $status;
echo "output: " . implode("\n", $output);

if(file_exists("/tmp/fet.error.log"))
{
  echo "Error Log: " . file_get_contents("/tmp/fet.error.log");
}

UPDATE

как сказал @mkotwd в другом ответе (после попытки отладки кода выше). Проблема в том, что fet пытается получить доступ к X-серверу. Итак, ответ @mkotwd: добавьте:

export DISPLAY=:0

и команда становится:

exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out");
0 голосов
/ 29 марта 2011

решение состоит в том, чтобы добавить эту команду раньше:

export DISPLAY=:0

поэтому код становится:

<?php
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out");
?>
0 голосов
/ 28 марта 2011

Проверьте php -i | less для:

Это может быть одна из тех мер безопасности, которая предотвращает эти критические команды (или обе).

0 голосов
/ 28 марта 2011

Похоже, вы запускаете fet из локальной установки (основываясь на опубликованной вами команде ./fet).

Вам необходимо добавить местоположение вашей установки fet в переменную PATH.

В системе linux отредактируйте ~ / .bashrc и добавьте следующее:

export PATH=$PATH:/home/mkotwd/fet

если / home / mkotwd / fet - это то место, где вы установили fet.

Также вы можете создать каталог ~ / bin, добавить его в PATH, как описано выше, и создать символическую ссылку ~ / bin / fet, которая указывает на ваш исполняемый файл fet. Это рекомендуемое решение, поскольку вам не нужно добавлять в PATH каталог каждой локальной команды, которую вы, возможно, захотите выполнить в будущем, вы можете просто создать символические ссылки на каждый исполняемый файл в ~ / bin

Возможно, вы также захотите проверить http://php.net/manual/en/function.exec.php для получения сведений о вызовах, соображений безопасности и различных советов, опубликованных пользователями, которые использовали команду для различных задач.

...