ImageMagick: png PHP ile başarısız ve bash kabuğu ile çalışır dönüştürmek

6 Cevap php

Ben bir çözüm bulmak için henüz ettik, çok garip bir hata var. UPDATE aşağıya çözüm görmek

Ne yapmaya çalışıyorum bir 160x120 minik bir tam boy resim dönüştürmek olduğunu. O değil png ile, her boyutta jpg ve jpeg dosyaları ile harika çalışıyor.

ImageMagick komut:

/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 function (kısaltılmış)

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

Bu işlev convert komut (küçük resim oluşturulur değildir) başarısız gelir $ retval eşit 1 çalıştığında.

O benim kabuk içinde aynı komutunu çalıştırırsanız, ilginç alır, çalışır yerdir.

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$

Ben sistemi gibi farklı PHP fonksiyonunu kullanarak denedim, passthru ama işe yaramadı. Ben belki burada birileri çözüm bildiğimi sanıyordum.

I istimal

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

Teşekkürler!

UPDATE

Ben aşağıdaki bağımlılıklar güncelleştirilmiş

  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

Ancak, benim sorunu çözmek değil.

2nd UPDATE

Sonunda işlevi bu Apache günlüklerinde basılmış olur ne çalıştığında, yardımcı olabilecek bir şey buldum:

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

3rd UPDATE

libiconv.2.dylib sürüm 8.0.0 'dır ...

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)

4th UPDATE

Sorun MAMP ilişkili olduğu, aşağıdaki çözüm görmek

6 Cevap

Münhal!

Bu environement değişken DYLD_LIBRARY_PATH doğru ayarlanmış değildi çıkıyor.

Mac OS X Leopard libiconv 7.0.0 ile geliyor ama convert (yukarıdaki 2 GÜNCELLEME bakınız) 8.0.0 gerektirir

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 ve tüm bağımlılıkları /opt/local altında MacPorts ile kurulmuştur. Bu manuel DYLD_LIBRARY_PATH için yol / opt / local / lib eklemek gerekir.

Ben Mac OS X Leopard /opt/local/lib DYLD_LIBRARY_PATH için yolu eklerseniz apachectl dosya /usr/sbin/envvars çalışmıyor Envvars. Neden? Mac OS X Leopard apache kullanmayın çünkü, ben mAmp kullanın.

MAMP has its own fBapachectl and it's own dosyasını Envvars.

I-/opt/local/lib DYLD_LIBRARY_PATH yolunu MAMP içinde apachectl dosya Envvars /Applications/MAMP/Library/bin/envvars eklendi

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

Şimdi benim PNG tanesinden üretiliyor ve hiçbir hata apache hata günlüğünde oluşturulur!

Ben bu kimse ve ben yardım istemeden önce her günlükleri dosyaları kontrol etmek için hatırlayacağım bir dahaki zaman yardımcı olacağını umuyoruz!

Phil

Benim yolu / opt / local / bin oldu, ama bile DYLD_LIBRARY_PATH işe yaramadı sözlerine ekledi. Ben sadece düz ole PATH değişti Son olarak, PHP üzerinden çalıştı.

, Çalışmaz mı ...

; DYLD_LIBRARY_PATH = "/ opt / local / bin :/ Uygulamalar / MAMP / Library / lib: $ DYLD_LIBRARY_PATH"

; Ihracat DYLD_LIBRARY_PATH

; Bu çalışır!

export PATH = "$ PATH :/ opt / local / bin"

Php kod çalıştıran kullanıcı dosyaları ve dizinleri aynı izinleri var mı?

Web sunucusu dönüştürme programı çalıştırmak için izniniz ve PHP include_path convert (varsayılan olarak dahil değildir / opt / local / bin /) yolu mu?

Ben, libiconv ile benzer bir sorunu olan ImageMagic Snow Leopard üzerinde çalışmak için çalışıyorum, ama AFAIK DYD_LIBRARY_PATH doğru ediyorum. Ben sürüm 1.13 build, ama hala sadece sürüm 7.0.0 sağlar diyor

Bunlar açık olabilir, ama PHP güvenli modda, open_basedir'dan, ve exec devre dışı olup olmadığını gibi şeyleri kontrol emin olun.