Я использую lighttpd 1.4.35 на Debian 8.2. У меня есть очень простой HTML-файл с php-кодом (php5), который вызывает скрипт bash и печатает вывод:
<html>
<body>
<?php
$res = shell_exec("/var/www/html/run.sh");
echo $res . " is the result";
?>
</body>
</html>
Если этот HTML-файл вызывается в Firefox, вывод
is the result
Если я напрямую запускаю php с этим файлом (php index.php
), на выходе
<html>
<body>
13.00
is the result</body>
</html>
Так где же теряется результат?
редактировать:
Исходный код веб-страницы от Firefox
<html>
<body>
is the result</body>
</html>
редактировать: решено. Скрипт bash использует ‘~’, который раскрывается в неправильный каталог при запуске скрипта с веб-сервера.
Функции exec «only» возвращают содержимое stdout, поэтому вы можете пропустить сообщение об ошибке.
Но вы можете перенаправить stderr к выводу, например с помощью
$res = shell_exec("/var/www/html/run.sh 2>&1");
shell_exec
не работает, если вы находитесь в безопасный режим, это может быть проблемой