微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Php exec命令转换图像

我正在尝试使用imagemagick命令“convert”从.png创建一个.tif图像.

我带来的是:

$exec = "/opt/local/bin/convert -adaptive-resize 150% ".$pos.".png ".$pos.".tif";
exec($exec);

如果我遇到CLI“哪个转换”我得到了这条路径:/ opt / local / bin / convert.我也试过没有路径,只有/ opt / local / bin / convert -adaptive-resize 150%“.$pos.”.png“.$pos.”.tif和/ etc / local / bin / convert – 自适应调整大小150%“.$pos.”.png“.$pos.”.tif.

如果我在终端中运行该命令它按预期工作,但是当我尝试从PHP脚本中使用它时,它不起作用.

编辑:
我还尝试使用以下代码创建.sh文件,但没有成功:

#! /bin/bash
convert -adaptive-resize 150% 1.png 1.tif
convert -adaptive-resize 150% 2.png 2.tif
convert -adaptive-resize 150% 3.png 3.tif
convert -adaptive-resize 150% 4.png 4.tif
convert -adaptive-resize 150% 5.png 5.tif
convert -adaptive-resize 150% 6.png 6.tif
convert -adaptive-resize 150% 7.png 7.tif
convert -adaptive-resize 150% 8.png 8.tif
convert -adaptive-resize 150% 9.png 9.tif

如果我从终端运行它就像一个魅力.
相反,如果我尝试从一个简单的PHP文件执行它,它不会创建任何.tif文件.

<?PHP
$exec = "./convertpngtif.sh";
exec($exec);
?>

解决方法:

线索在上面的Hieu Nguyen回答:当你从命令行运行PHP -r时,它可以工作.当您在浏览器中运行时,它不会.这导致三个可能的问题之一.

要记住的关键是,当您运行exec时,脚本,用户,路径和工作目录将以运行PHP的相同用户/权限运行.

在命令行中运行PHP时,PHP将以用户为您登录用户(“您”)运行,因此exec()也将运行“您”.这也是您用来编写shell脚本的用户.因此权限与您的相同,并且它的工作原理(很棒).

PHP在Apache(或IIS)中运行时,可能是也可能不是“你”.在你的情况下,它显然不是因为脚本不起作用 – PHP可能运行为“apache”或“http”或“www”或一些类似命名的用户.

这导致三个可能的问题之一.那要检查一下:

1)和2)路径和工作目录.

上面一次提出了一个建议,但是规定绝对路径(即完整路径,从root /开始)到所有文件 – 可执行命令,输入文件输出文件更安全.这排除了可能出现的路径或工作目录的任何差异.如果使用shell脚本,则规定shell脚本的完整路径及其中的完整路径(或在顶部设置路径/目录)

3)权限

上面再次提出,但每个人都专注于文件.但是你检查过convert executable命令本身的权限了吗?

还有shell脚本,你有没有为PHP运行的用户设置可执行文件的权限?如果你在apache中以不同的用户身份运行,则“你”所拥有的rwxr – r–并不令人满意.

如果与这些方法斗争,还有其他几种解决方案:

>即使在使用fastCGI安装的Apache中,您也可以将PHP作为“您”运行.这样您就可以知道运行两个PHP脚本的用户/路径/工作目录了. (我仍然建议使用完整路径,但仍然可以缓解权限问题)
>您可以通过以“apache”或“www”或“http”等身份登录并设置权限/路径来调试脚本,以便您的脚本现在可以正常工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐