Question

J'ai un bug très étrange pour lequel je n'ai pas encore trouvé de solution. MISE À JOUR voir la solution ci-dessous

Ce que j'essaie de faire est de convertir une image en taille réelle en une vignette de 160x120. Cela fonctionne très bien avec les fichiers jpg et jpeg de toute taille, mais pas avec les png.

Commande 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'

Fonction PHP (raccourcie)

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

Lorsque cette fonction exécute $ retval égal à 1, cela signifie que la commande de conversion a échoué (la miniature n'est pas créée).

C’est là que ça devient intéressant, si je lance exactement la même commande dans mon shell, ça marche.

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$ 

J'ai essayé d'utiliser différentes fonctions PHP telles que system, passthru mais cela n'a pas fonctionné. Je pensais que peut-être quelqu'un ici connaissait la solution.

j'utilise

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

Merci!

MISE À JOUR

J'ai mis à jour les dépendances suivantes

  1. libpng de 1.2.35 à 1.2.37
  2. libiconv du 1.12_2 au 1.13_0
  3. ImageMagick 6.5.2-4_1 à 6.5.2-9_0

Cependant, cela n'a pas résolu mon problème.

2nd UPDATE

J'ai finalement trouvé quelque chose qui pourrait aider. Lorsque la fonction est exécutée, c'est ce qui est imprimé dans les journaux 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ème UPDATE

libiconv.2.dylib est la 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ème UPDATE

Le problème était lié à MAMP, voir la solution ci-dessous

Était-ce utile?

La solution

Résolu!

Il s'avère que la variable d'environnement DYLD_LIBRARY_PATH n'a pas été définie correctement.

Mac OS X Leopard est fourni avec libiconv 7.0.0 mais la conversion nécessite 8.0.0 (voir la 2e MISE À JOUR ci-dessus)

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 et toutes les dépendances ont été installés avec MacPorts sous / opt / local . Cela nécessite d’ajouter manuellement le chemin / opt / local / lib à DYLD_LIBRARY_PATH .

Si j'ajoute le chemin / opt / local / lib à DYLD_LIBRARY_PATH dans le fichier envvars de Mac OS X Leopard usr / sbin / envvars cela ne fonctionne pas. Pourquoi? C'est parce que je n'utilise pas Apache sous Mac OS X Leopard, j'utilise MAMP.

MAMP possède son propre script apachectl et son propre fichier envvars.

J'ai ajouté le chemin / opt / local / lib au DYLD_LIBRARY_PATH dans le fichier MAMP apachectl envvars / Applications / MAMP / Bibliothèque / bin / envvars

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

Mes miniatures PNG sont maintenant générées et aucune erreur n'est générée dans le journal des erreurs apache!

J'espère que cela aidera quelqu'un et la prochaine fois, je vérifierai tous les fichiers de journalisation avant de demander de l'aide!

Phil

Autres conseils

Mon chemin était / opt / local / bin, mais même l'ajout à DYLD_LIBRARY_PATH n'a pas fonctionné. Enfin, lorsque j'ai changé PATH, cela fonctionnait simplement via PHP.

; N'a pas fonctionné ...

; DYLD_LIBRARY_PATH = "/ opt / local / bin: / Applications / MAMP / Bibliothèque / lib: $ DYLD_LIBRARY_PATH"

; export DYLD_LIBRARY_PATH

; Cela fonctionne!

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

Assurez-vous que l'utilisateur qui exécute le code php dispose des mêmes autorisations sur les fichiers et les répertoires.

Celles-ci doivent être évidentes, mais assurez-vous de vérifier des éléments tels que le mode sécurisé de PHP, open_basedir et si exec a été désactivé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top