Я написал следующий код для показа номера версии 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
напечатанный, но не номер версии, почему?
Благодарю.
Возможно, ghostscrsipt записывает данные в STDERR вместо STDOUT. Попробуйте сделать
/usr/bin/gs --version 2>&1
перенаправить stderr в stdout и повторить попытку
Вы должны использовать var_dump($ver);
для целей отладки, потому что ваш код работает:
$ php -r "echo shell_exec('/usr/bin/gs --version');" 8.71
Я просто запустил его в своей linux-коробке и, согласно shell_exec()
, все должно быть хорошо.
Что нужно искать:
exec()
может вернуть код выхода / вернуть статус команды. NULL
, см. этот ответ . 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 "