PHP exec()无法运行GhostScript。

4

我正在尝试使用一个需要执行GhostScript的库,但它在我的MAMP服务器上无法执行。 我编写了这个小代码来运行测试:

<?php 
$cmd = "...";
$output = array();
exec($cmd, $output)
echo $output[0];
?>

首先,我已将$cmd设置为'whoami',在PHP和终端中都可以正常工作并给出相同的结果(我的用户名)。

然后我尝试使用'/usr/texbin/latex --version',这也很好地工作了。

但是,当我尝试使用'/opt/local/bin/gs --version'时,它失败了,而在终端中它却可以工作。

在我看来,这既不是路径问题也不是apache授权问题(从我迄今为止所读到的),所以我正在失去主意。

提前致谢!


安全模式/安全模式执行目录是否已设置?http://www.php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir - Michael MacDonald
对我来说看起来像是授权问题。为什么不在你的PHP文件夹中创建一个符号链接,并给它正确的授权呢? - ITroubs
@MichaelMacDonald:我使用的是 PHP 5.4.10,所以这些已经不存在了。@ITroubs:我在文件所在目录中创建了一个 ln -s /opt/local/bin/gs gs,但我不确定如何更改授权? - Arnaud
@ITroubs 符号链接的权限不能比目标文件更宽松,或者说这并不重要。最终决定可以做什么的是目标文件。 - fredrik
4个回答

0

虽然已经有几年了,但无论如何。今天我遇到了同样的问题(尝试在Ubuntu 14.4上使用php exec()运行ghostscript,意味着不是mamp,而是需要单独安装apache、php、tesseract、ghostscript等),通过创建一个bash shell脚本,在其中使用参数运行gs,然后使用php exec()运行sh脚本来解决了这个问题。

我的bash shell脚本中的一行:

gs -dBATCH -dNOPAUSE -r300 -sDEVICE=jpeg -sOutputFile=/var/www/html/ykinv/jpg/${theFile}

这是我的 PHP 脚本中的 php exec 行:

exec("sh pdf2jpgConversion.sh");

所有脚本都存储在同一个文件夹中。


0
当我使用exec()或shell_exec()运行Ghostscript命令时,遇到了类似的问题。我收到了以下错误:
gs: /opt/lampp/lib/libtiff.so.5: no version information available (required by /usr/lib/x86_64-linux-gnu/libgs.so.9) gs: /opt/lampp/lib/libz.so.1: version `ZLIB_1.2.9' not found (required by /usr/lib/x86_64-linux-gnu/libpng16.so.16) 

设置LD_LIBRARY_PATH变量解决了我的问题。

<?php

$command = 'export LD_LIBRARY_PATH="' . $path_to_library_dir .'"; ' . $path_to_binary;
shell_exec($command);

?>

在我的Ubuntu 18.04中,$path_to_library_dir是"/usr/share/ghostscript/9.26/lib",而$path_to_binary是"/usr/bin/gs"。
您可以通过在终端中执行gs --help命令来验证库文件路径。 要验证path_to_binary的路径,请使用which gs

-1

shell_exec 对我有效,而不是 exec


2
请参考以下链接:“如何撰写好的答案?”(http://stackoverflow.com/help/how-to-answer) - hassan

-4
Try this.

ini_set('display_errors', 1);
$pdf='test.pdf';
$quality=90;
$res='300x300';
$exportName="pdf_export_" . time();
$exportPath=realpath(dirname(__FILE__))."/$exportName/fullres/%03d.jpg";

mkdir(realpath(dirname(__FILE__))."/$exportName");
mkdir(realpath(dirname(__FILE__))."/$exportName/fullres");

set_time_limit(900);
exec("'gs' '-dNOPAUSE' '-sDEVICE=jpeg' '-dUseCIEColor' '-dTextAlphaBits=4' '-dGraphicsAlphaBits=4' '-o$exportPath' '-r$res' '-dJPEGQ=$quality' '$pdf'",$output);

1
-1,你应该将你的工作归功于原作者:http://www.veryinteractivepeople.com/?p=521 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接