Phi*_* M. 5 php mamp apache2 imagemagick
我有一个非常奇怪的错误,我还没有找到解决方案.更新请参阅下面的解决方案
我想要做的是将全尺寸图片转换为160x120缩略图.它适用于任何大小的jpg和jpeg文件,但不适用于png.
ImageMagick命令:
/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
Run Code Online (Sandbox Code Playgroud)
PHP函数(缩短)
...
$cmd = "/opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'";
exec($cmd, $output, $retval);
$errors += $retval;
if ($errors > 0) {
die(print_r($output));
}
Run Code Online (Sandbox Code Playgroud)
当此函数运行$ retval等于1时,表示转换命令失败(未创建缩略图).
这是它变得有趣的地方,如果我在我的shell中运行完全相同的命令,它的工作原理.
wedbook:~ wedix$ /opt/local/bin/convert '/WEBSERVER/images/img_0003-192-10.png' -thumbnail x320 -resize '320x<' -resize 50% -gravity center -crop 160x120+0+0 +repage -quality 91 '/WEBSERVER/thumbs/small_img_0003-192-10.png'
wedbook:~ wedix$
Run Code Online (Sandbox Code Playgroud)
我尝试过使用不同的PHP函数,如system,passthru,但它没有用.我想也许有人在这里知道解决方案.
我正在使用
MAMP 1.7.2
Apache/2.0.59
PHP/5.2.6
谢谢!
UPDATE
我更新了以下依赖项
libpng from 1.2.35 to 1.2.37
libiconv from 1.12_2 to 1.13_0
ImageMagick 6.5.2-4_1 to 6.5.2-9_0
但是,它并没有解决我的问题.
第二次更新
我终于发现了一些可能有用的东西,当函数运行时,这是在Apache日志中打印的内容:
dyld: Library not loaded: /opt/local/lib/libiconv.2.dylib
Referenced from: /opt/local/bin/convert
Reason: Incompatible library version: convert requires version 8.0.0 or later, but libiconv.2.dylib provides version 7.0.0
Run Code Online (Sandbox Code Playgroud)
第三次更新
libiconv.2.dylib是8.0.0版本...
bash-3.2$ otool -L /opt/local/lib/libiconv.2.dylib
/opt/local/lib/libiconv.2.dylib:
/opt/local/lib/libiconv.2.dylib (compatibility version 8.0.0, current version 8.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.4)
Run Code Online (Sandbox Code Playgroud)
第4次更新
问题与MAMP有关,请参阅下面的解决方案
解决了!
事实证明环境变量DYLD_LIBRARY_PATH
没有正确设置.
Mac OS X Leopard附带libiconv 7.0.0但转换需要8.0.0(参见上面的第二个更新)
bash-3.2$ otool -L /usr/lib/libiconv.2.dylib
/usr/lib/libiconv.2.dylib:
/usr/lib/libiconv.2.dylib (compatibility version 7.0.0, current version 7.0.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 111.1.1)
Run Code Online (Sandbox Code Playgroud)
ImageMagick和所有依赖项都是在MacPorts下安装的/opt/local
.这需要手动添加路径/ opt/local/lib DYLD_LIBRARY_PATH
.
如果我添加的路径/opt/local/lib
,以DYLD_LIBRARY_PATH
在Mac OS X Leopard的apachectl
envvars中的文件/usr/sbin/envvars
这是行不通的.为什么?这是因为我不使用Mac OS X Leopard的apache,我使用MAMP.
MAMP 有自己的 apachectl脚本,它有自己的 envvars文件.
我添加的路径/opt/local/lib
,以DYLD_LIBRARY_PATH
在MAMP apachectl
envvars中的文件/Applications/MAMP/Library/bin/envvars
DYLD_LIBRARY_PATH="/opt/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH"
Run Code Online (Sandbox Code Playgroud)
现在我的PNG缩略图正在生成,并且在apache错误日志中没有生成错误!
我希望这会对某人有所帮助,下次我会记得在寻求帮助之前检查每个日志文件!
菲尔
小智 5
我的路径是/ opt/local/bin,但即使将它添加到DYLD_LIBRARY_PATH也行不通.最后,当我改变普通的ole PATH时,它通过PHP工作.
;不工作...
; DYLD_LIBRARY_PATH = "/选择/ local/bin目录:/应用/甲基苯丙胺/库/ lib目录下:$ DYLD_LIBRARY_PATH"
;导出DYLD_LIBRARY_PATH
; 这有效!
export PATH ="$ PATH:/ opt/local/bin"