【问题标题】:PHP exec() cannot run GhostScriptPHP exec() 无法运行 GhostScript
【发布时间】:2013-03-09 23:55:34
【问题描述】:

我正在尝试使用一个需要 exec() GhostScript 的库,但它在我的 MAMP 服务器上没有这样做。我写了一小段代码来运行测试:

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

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

然后我尝试使用'/usr/texbin/latex --version',它也可以正常工作。

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

在我看来,这既不是 PATH 问题,也不是 apache 授权问题(目前为止我所读到的通常怀疑),所以我的想法已经不多了。

提前致谢!

【问题讨论】:

  • 是否设置了安全模式/安全模式执行目录? php.net/manual/en/ini.sect.safe-mode.php#ini.safe-mode-exec-dir
  • 对我来说似乎是授权问题。你为什么不尝试在你的 php 文件的文件夹中创建一个符号链接并给它正确的授权
  • @MichaelMacDonald:我使用的是 PHP 5.4.10,所以这些不再存在。 @ITroubs:我从我的文件所在的目录创建了一个ln -s /opt/local/bin/gs gs,但我不确定如何更改授权?
  • @ITroubs 符号链接上的权限不能比目标更宽松,或者说它无关紧要。无论如何,目标决定最终可以做什么。
  • @fredrik 谢谢不知道

标签: php exec mamp


【解决方案1】:

虽然几岁,但无论如何。我今天遇到了同样的问题(尝试在 Ubuntu 14.4 上使用 php exec() 运行 ghostscript,这意味着不是 mamp,而是需要单独安装 apache、php、tesseract、ghostscript 等),并设法通过创建一个 bash 来解决它我在其中运行带有参数的 gs 的 shell 脚本,然后使用 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");

脚本都位于同一个文件夹中。

【讨论】:

    【解决方案2】:

    我在使用 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

    【讨论】:

      【解决方案3】:

      shell_exec 而不是 exec 为我工作

      【讨论】:

      【解决方案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);
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-07
      • 2016-04-21
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多