2009-06-19 137 views
5

我有一個非常奇怪的錯誤,我還沒有找到解決方案。 更新看到下面的解決方案ImageMagick:通過PHP轉換PNG失敗,並通過bash shell工作

我想要做的是將全尺寸圖片轉換爲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' 

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)); 
} 

當該函數運行$ 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$ 

我試過使用不同的PHP函數,如系統,passthru但它沒有工作。我想也許這裏有人知道解決方案。

我使用

  1. MAMP 1.7.2
    • Apache/2.0.59
    • PHP/5.2.6

謝謝!

UPDATE

我更新了以下相關

  1. libpng from 1.2.35 to 1.2.37
  2. libiconv from 1.12_2 to 1.13_0
  3. ImageMagick 6.5.2-4_1 to 6.5.2-9_0

但是,它並沒有解決我的PROBL EM。

月2日更新

我終於找到的東西,也許會有幫助,當函數運行這是被印在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 

3 UPDATE

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) 

4 UPDATE

問題涉及甲基苯丙胺,見下文

+1

非常感謝! – 2010-12-24 08:24:09

回答

7

解決了!

原來環境變量DYLD_LIBRARY_PATH設置不正確。

的Mac OS X Leopard的帶有libiconv的7.0.0,但轉換需要8.0.0(見上月2日更新)

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) 

ImageMagick的和所有的依賴與使用MacPorts安裝/opt/local下。這需要手動將路徑/ opt/local/lib添加到DYLD_LIBRARY_PATH

如果我在Mac OS X Leopard的apachectl envvars中/opt/local/lib添加路徑DYLD_LIBRARY_PATH文件/usr/sbin/envvars這是行不通的。爲什麼?這是因爲我不使用Mac OS X Leopard中的apache,我使用MAMP。

MAMP 有它自己的 apachectl腳本和它自己的 envvars文件。

我在MAMP添加的路徑/opt/local/libDYLD_LIBRARY_PATHapachectl envvars中文件/Applications/MAMP/Library/bin/envvars

DYLD_LIBRARY_PATH="/opt/local/lib:/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 

現在正在生成我的PNG縮略圖,並在Apache的錯誤日誌中生成沒有錯誤!

我希望這會幫助別人,下次我會記得在尋求幫助之前檢查每個日誌文件!

菲爾

+0

在閱讀有關COMMAND_MODE問題後,將會提示這是一個Leopard特定的問題。不錯的工作:) – defines 2009-06-20 14:08:16

+0

男人這不適合我,我在這裏拉我的頭髮......在這裏沒有提到你可能做的其他任何指示? – mga 2010-02-27 00:03:28

1

解決方案確保運行的PHP代碼的用戶對文件和目錄相同的權限。

+0

是的,圖像和大拇指文件夾也是世界可寫的。 – philhq 2009-06-19 20:01:49

0

這些應該是顯而易見的,但請確保您檢查諸如PHP安全模式,open_basedir以及exec是否已被禁用。

+0

他們不禁用,我能夠從JPG和JPEG文件,而不是從PNG文件生成縮略圖。請參閱下面的解決方案 – philhq 2009-06-20 09:12:45

5

我的路徑是/選擇/ 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」