已解决:MAMP Php可以';安装自制ImageMagick后执行t(';转换';)

已解决:MAMP Php可以';安装自制ImageMagick后执行t(';转换';),php,osx-lion,imagemagick,mamp,homebrew,Php,Osx Lion,Imagemagick,Mamp,Homebrew,我在Lion上使用自制软件安装了Imagemagick,一切都很好,只是从php调用时它根本不起作用。控制台: $ convert -version Version: ImageMagick 6.7.1-1 2011-07-29 Q16 http://www.imagemagick.org Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC Features: OpenMP $ which convert /usr/loca

我在Lion上使用自制软件安装了Imagemagick,一切都很好,只是从php调用时它根本不起作用。控制台:

$ convert -version
Version: ImageMagick 6.7.1-1 2011-07-29 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2011 ImageMagick Studio LLC
Features: OpenMP   

$ which convert
/usr/local/bin/convert
PHP:

或 exec('convert-version',$output); 变量转储(输出)

不生成任何内容(或空数组)

我需要在本地进行测试,以确保能够在生产环境中检测到转换。但是我不能正确地测试它。路径是设置好的,它在终端中工作,但不是从PHP

已解决:

事实证明,要让php工作,convert应该在
/usr/bin/
中,所以这就解决了它:

ln -s /usr/local/bin/convert /usr/bin/convert
更新

这是因为MAMP,以下是修复方法:

打开/Applications/MAMP/Library/bin/envvars

并注释掉以下几行:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH

完成。

验证convert in是服务器的PATH环境变量。或者只指定完整路径:

exec('/usr/local/bin/convert -version');

exec
返回命令结果的最后一行,该行恰好是一个空字符串。 如果要获得输出,只需执行以下操作:

exec('convert -version', $output);
var_dump($output); // it is an array which filled with every line of output from the command

只需使用exec(“PATH=\$PATH:/usr/local/bin;convert file.pdf file.png”)它将在运行时添加转换到路径。

在此处添加我自己的答案,以便您可以投票:

这是由MAMP引起的,修复方法如下:

打开
/Applications/MAMP/Library/bin/envvars

并注释掉以下几行:

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH
完成。

而不是仅执行(“转换…”); 使用完整路径。你可以通过输入终端来获得它

类型转换

你应该得到类似于: convert是散列的(/opt/local/bin/convert)

因此,现在使用:

exec(“/opt/local/bin/convert…”)

[归功于@Nikki]

在那之后,我的评论被删除了

DYLD_LIBRARY_PATH=“/Applications/MAMP/LIBRARY/lib:$DYLD_LIBRARY_PATH” 导出动态库路径


在/Applications/MAMP/Library/bin/envvars

中,PHP的路径中是否有转换?您可能需要在exec()调用中指定一个
/absolute/path/to/convert
。请记住,PHP exec()调用中的环境可能与shell提示符下的环境有很大的不同。嗯,问题是——所有东西都在生产服务器上工作,而不是使用自制。我认为路径应该继承到exec沙盒中,不是吗?php的shell环境与用户shell环境完全不同。你不能直接比较它们。尝试执行
exec('echo$PATH')查看shell的运行情况。PHP将继承Apache环境。太棒了!成功了!你可能帮我多节省了几个小时。我非常感谢@aorcsik!只是编辑环境变量对我不起作用。我必须在/usr/bin/too中创建符号链接,才能让Imagick在exec中工作。另外,请记住在编辑envvars后在MAMP中重新启动服务器
如果您还希望在
$output
中出现错误。当然,我也使用了var_dump,它不会返回任何东西,那么使用convert的完整路径怎么样?它位于控制台中的路径中,但不在php的exec中,但是在生产服务器上,一切似乎都正常。我需要能够自动检测imagemagick。它可以在Linux上运行,但不能在自制软件上运行。一旦您的项目进入生产阶段,您会很快发现这是一个坏习惯。同样适用于XAMPP,path:/Applications/XAMPP/xamppfiles/bin/envvarst这正是我需要的。但是在这里,我需要对我的PHP代码进行一个技巧,因为我不需要到我的实时机器的路径。你知道在mac上设置这个导出路径的方法吗?你救了我!现在我可以使用exec命令,而不包括绝对路径。
DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
export DYLD_LIBRARY_PATH