在ubuntu中通过PHP显示ghostscript版本号

Posted

技术标签:

【中文标题】在ubuntu中通过PHP显示ghostscript版本号【英文标题】:display ghostscript version number through PHP in ubuntu 【发布时间】:2011-07-08 15:48:58 【问题描述】:

我写了如下代码来显示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,但不能打印版本号,为什么?

谢谢。

【问题讨论】:

尝试用exec替换shell_exec @hakre:你为什么问我? @lok​​heart:如果您在 shell 中手动执行该命令,它会在屏幕上打印什么? @Rocket:对不起。 【参考方案1】:

可能 ghostscrsipt 正在将数据写入 STDERR 而不是 STDOUT。尝试做

/usr/bin/gs --version 2>&1 

将 stderr 重定向到 stdout 并重试

【讨论】:

我需要尝试gs版本号因为我需要使用php来使用gs来捕获一些图像,但是我无法使用exec运行它,所以我尝试了一个较小的显示任务版本号,但仍然失败 @lok​​heart:您是否尝试过像 Marc B 建议的那样将 STDERR 重定向到 STDOUT? 我试过$ver = shell_exec('/usr/bin/gs --version 2&gt;&amp;1');,输出是string(111) "/usr/bin/gs: /opt/lampp/lib/libgcc_s.so.1: version GCC_4.2.0' not found (required by /usr/lib/libstdc++.so.6) "`,出了什么问题?跨度> 如果 gs 从命令行工作,那么 PHP 调用的任何 shell 都没有正确的库路径,并且找不到编译 GS 的 gcc 库。【参考方案2】:

您应该使用var_dump($ver); 进行调试,因为您的代码可以正常工作:

$ php -r "echo shell_exec('/usr/bin/gs --version');"
8.71

我刚刚让它在我的 linux 机器上运行,根据 shell_exec() Docs,应该没问题。

要寻找的东西:

已启用安全模式? exec()可以返回命令的退出码/返回状态。 如果返回NULL,请参阅this answer

STDERR 和 shell_exec()

shell_exec() 只会返回写入 STDOUT 的命令输出。如果命令不能被shell调用,这个函数会返回NULL,并且会隐藏报错的内容。

要在返回值中也包含错误,需要将 STDERR 重定向到 STDOUT。这是通过在命令末尾添加2&gt;&amp;1 来完成的。下面是相同的示例代码,但演示的命令错误:

$ php -r "var_dump(shell_exec('/usr/bin/gs2 --version 2>&1'));"
string(44) "sh: /usr/bin/gs2: No such file or directory
"

【讨论】:

我检查了phpinfo(),安全模式已禁用 我添加了对该问题的引用。检查它是否有帮助。

以上是关于在ubuntu中通过PHP显示ghostscript版本号的主要内容,如果未能解决你的问题,请参考以下文章

在菜单中通过functions.php使用自定义字段默认图像[关闭]

在Nginx中通过phpmyadmin将20mb SQL文件导入MySQL时,“连接已重置”

php中通过Hashids将整数转化为唯一字符串

在VMWare中安装了Ubuntu16.04,想要 Win10 中通过 SecureCRT 来操作

在Ubuntu中通过update-alternatives切换软件版本

每日Ubuntu小技巧:Ubuntu中通过Cheese支持Webcam