【问题标题】:Imagemagick convert command returning error code 4 when used with PHP与 PHP 一起使用时,Imagemagick 转换命令返回错误代码 4
【发布时间】:2018-05-29 11:09:19
【问题描述】:

我正在使用 PHP exec 函数执行 ImageMagick 命令,它返回一个 error code 4 probably 表示 The system cannot open the file 但是当我在 Windows 终端中运行相同的命令时它工作正常。我正在使用以下命令来调整图像大小:

在终端(工作正常)

convert -resize 150^% ad.png res_ad.png

在 PHP 中(返回错误代码 4)

exec(escapeshellcmd("convert -resize 150% $file_name.png res_$file_name.png"), $output2, $return2)

PS:我已经检查过,图片的路径是正确的。

【问题讨论】:

  • 你可以这样试试吗? $command = '转换 -resize 150% "'.$file_name.'.png" "res_'.$file_name.'.png"'; exec($command, $output2, $return2);
  • @JosMarRivera 我试过了,得到了同样的错误。反正你提供的命令和我一样。
  • 已解决的问题:我在互联网上某处读到:在 Windows 上,有几个 convert.exe 命令,所有这些命令都在 PATH 中。因此,您必须指定正确的 convert.exe 可执行文件的路径。解决方案:在命令前添加“magick”,效果很好,例如:magick convert ad.png -resize 150% res_ad_png 效果很好
  • 太棒了@D555,我为你感到高兴!

标签: php windows imagemagick wamp


【解决方案1】:

我只使用 php 从 Imagemagick 返回了 1 或 0,所以我不知道 4 是从哪里来的。

我使用过与您类似的代码,但从未在 exec 中使用过 escapeshellcmd。 exec 正在调用一个外部程序,我不确定你是否可以在那里使用它。

尝试(注意输入图像在大多数情况下都在转换之后):

exec("convert $file_name.png -resize 150% res_$file_name.png");

您可以在将输入和输出图像文件名发送到 exec() 之前验证它们

不同的错误报告:

$array=array();
echo "<pre>";
exec("convert $file_name.png -resize 150% res_$file_name.png 2>&1", $array); 
echo "<br>".print_r($array)."<br>"; 
echo "</pre>";

【讨论】:

  • 不幸的是它没有用。即使我在 -resize 之后写入文件名,它在命令行中也可以正常工作,但在 php 脚本中无法正常工作
  • 您是否尝试过在同一文件夹中的图像上运行代码并保存到同一文件夹。使用硬编码的输入输出图像名称?我还添加了更多代码,使用不同的方式输出错误。建议将输入文件名直接放在转换之后,并且在 V7 中这是必须的。它在你拥有它的大部分时间都可以工作,但取决于使用的选项,它可能会失败。
  • 您是否从 Bonzo 的命令中收到任何错误消息?如果不是,那么很可能是您的 PHP 环境。也许您没有使用 exec() 的权限?
  • @Bonzo 我尝试了您的新错误报告方式,并根据您的建议更改了参数的顺序:它打印:Array ( [0] => Invalid Parameter - -resize )。这有点奇怪,因为相同的命令在 Windows 终端中完美运行。这绝对不是 exec 权限问题。
  • 正如我所说,我会尝试在同一个文件夹中对所有内容进行硬编码,以证明它可以工作。还将 -resize 更改为 150x150 以删除任何可能的路径错误、文件名中的空格和 % 可能需要转义。
猜你喜欢
  • 1970-01-01
  • 2019-08-27
  • 2020-04-20
  • 2017-12-21
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2015-02-18
  • 1970-01-01
相关资源
最近更新 更多