在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:你为什么问我?
@lokheart:如果您在 shell 中手动执行该命令,它会在屏幕上打印什么? @Rocket:对不起。
【参考方案1】:
可能 ghostscrsipt 正在将数据写入 STDERR 而不是 STDOUT。尝试做
/usr/bin/gs --version 2>&1
将 stderr 重定向到 stdout 并重试
【讨论】:
我需要尝试gs版本号因为我需要使用php来使用gs来捕获一些图像,但是我无法使用exec
运行它,所以我尝试了一个较小的显示任务版本号,但仍然失败
@lokheart:您是否尝试过像 Marc B 建议的那样将 STDERR 重定向到 STDOUT?
我试过$ver = shell_exec('/usr/bin/gs --version 2>&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>&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时,“连接已重置”
在VMWare中安装了Ubuntu16.04,想要 Win10 中通过 SecureCRT 来操作