已解决:MAMP Php可以';安装自制ImageMagick后执行t(';转换';)
我在Lion上使用自制软件安装了Imagemagick,一切都很好,只是从php调用时它根本不起作用。控制台:已解决: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
$ 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