Я написав такий код для відображення номера версії ghostscript:
<html>
<head>
<title></title>
</head>
<body>
<?
$ver = shell_exec("/usr/bin/gs --version");
//$ver = exec(GS_BIN . " --version");
print "$ver";
print "A";
?>
</body>
</html>
Я можу отримати A
надруковано, але не номер версії, чому?
Дякую.
Відповіді:
2 для відповіді № 1Можливо, ghostscrsipt записує дані в STDERR замість STDOUT. Спробуйте зробити
/usr/bin/gs --version 2>&1
щоб перенаправити stderr на stdout і повторити спробу
1 для відповіді № 2
Ви повинні використовувати var_dump($ver);
для налагодження, оскільки ваш код просто працює:
$ php -r "echo shell_exec("/usr/bin/gs --version");"
8.71
Я щойно запустив його на моєму Linux box і згідно з shell_exec()
Документи, це повинно бути добре.
Що шукати:
- Безпечний режим увімкнено?
exec()
може повернути код виходу / статус повернення команди.- якщо він повернеться
NULL
, побачити ця відповідь.
STDERR та shell_exec ()
shell_exec()
поверне лише команди, виведені в STDOUT. У випадку, якщо оболонка не може викликати команду, ця функція повернеться NULL
і це приховає те, що було повідомлено про помилку.
Щоб включити помилки також у повернене значення, STDERR потрібно перенаправити на STDOUT. Це робиться шляхом додавання 2>&1
до кінця команди. Ось той самий приклад коду з неправильною командою для демонстрації:
$ php -r "var_dump(shell_exec("/usr/bin/gs2 --version 2>&1"));"
string(44) "sh: /usr/bin/gs2: No such file or directory
"