我已经编写了以下代码来显示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
,但不能打印版本号吗?
感谢。
答案 0 :(得分:2)
可能ghostscrsipt正在将数据写入STDERR而不是STDOUT。尝试做
/usr/bin/gs --version 2>&1
将stderr重定向到stdout并再试一次
答案 1 :(得分:1)
您应该使用var_dump($ver);
进行调试,因为您的代码正常运行:
$ php -r "echo shell_exec('/usr/bin/gs --version');"
8.71
我只是在我的linux机器上运行它并根据shell_exec()
Docs,它应该没问题。
要寻找的东西:
exec()
可以返回命令的退出代码/返回状态。NULL
,请参阅 this answer 。 shell_exec()
只会返回写入STDOUT的命令输出。如果shell无法调用该命令,则此函数将返回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
"