Frage

Ich habe einen sehr seltsamen Fehler bekommt, die ich noch habe, eine Lösung zu finden. UPDATE siehe Lösung unter

Was ich versuche, ein Vollbild in ein 160x120 Bild um es zu tun ist, konvertieren. Es funktioniert großartig mit jpg und jpeg-Dateien jeder Größe, aber nicht mit png.

ImageMagick Befehl:

/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-Funktion (verkürzt)

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

Wenn diese Funktion $ retval gleich 1 läuft, das bedeutet, dass der Befehl convert fehlgeschlagen (Miniaturbild wird nicht erstellt).

Dies ist, wo es interessant wird, wenn ich genau das gleiche Befehl in meinem Shell ausgeführt, es funktioniert.

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$ 

Ich habe versucht, verschiedene PHP-Funktion wie System, passthru verwenden, aber es hat nicht funktioniert. Ich dachte, vielleicht jemand hier die Lösung kannte.

Ich bin mit

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

Danke!

UPDATE

ich die folgenden Abhängigkeiten aktualisiert

  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

Es ist jedoch nicht mein Problem lösen kann.

2. UPDATE

Schließlich fand ich etwas, das helfen könnte, wenn die Funktion läuft das ist, was in den Apache-Logs gedruckt wird:

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 ist Version 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

Problem wurde auf MAMP beziehen, finden Lösung unter

War es hilfreich?

Lösung

Gelöst it!

Es stellt sich heraus die environement Variable DYLD_LIBRARY_PATH wurde nicht richtig eingestellt.

Mac OS X Leopard kommt mit libiconv 7.0.0 aber convert erfordert 8.0.0

(2. UPDATE siehe oben)
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 und alle Abhängigkeiten mit MacPorts unter /opt/local installiert. Dies erfordert, um manuell den Pfad / opt / local / lib in dem DYLD_LIBRARY_PATH.

Wenn ich den Pfad /opt/local/lib hinzufügen im Mac OS X Leopard DYLD_LIBRARY_PATH envvars Datei apachectl /usr/sbin/envvars funktioniert es nicht. Warum? Es ist, weil ich Apache nicht verwenden von Mac OS X Leopard, verwende ich MAMP.

MAMP hat seinen eigenen apachectl-Skript und eine eigenen envvars Datei.

Ich habe den Pfad /opt/local/lib in der MAMP DYLD_LIBRARY_PATH envvars Datei apachectl /Applications/MAMP/Library/bin/envvars

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

Nun meine PNG Thumbnails erzeugt werden und keine Fehler in dem Apache-Fehlerprotokoll erzeugt!

Ich hoffe, das jemand und beim nächsten Mal helfen wird, werde ich mich merkt jeder Log-Dateien zu überprüfen, bevor um Hilfe zu bitten!

Phil

Andere Tipps

Mein Weg war / opt / local / bin, aber auch hinzu, dass zu DYLD_LIBRARY_PATH nicht funktionierte. Schließlich, wenn ich einfach nur ole PATH geändert, es funktionierte über PHP.

; Hat nicht funktioniert ...

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

; Export DYLD_LIBRARY_PATH

; Dies funktioniert!

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

Machen Sie den Benutzer sicher, den PHP-Code ausgeführt wird, die gleichen Berechtigungen für die Dateien und Verzeichnisse hat.

Diese sollte offensichtlich sein, aber stellen Sie sicher, dass Sie Dinge wie PHP Safe Mode überprüfen, open_basedir und ob exec deaktiviert wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top