отображать номер версии ghostscript через PHP в ubuntu

Я написал следующий код для показа номера версии 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 , см. этот ответ .

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 "