2009-06-19 20 views
5

Tengo un bicho muy raro que todavía tengo que encontrar una solución. ACTUALIZACIÓN ver solución a continuaciónImageMagick: convertir png fallan a través de PHP y trabaja a través de shell bash

Lo que estoy tratando de hacer es convertir una imagen de tamaño completo en una miniatura de 160x120. Funciona a la perfección con el jpg y jpeg archivos de cualquier tamaño, pero no con png.

comando de 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' 

función de PHP (abreviado)

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

Cuando esta función se ejecuta $ retval igual a 1 que significa que el comando de conversión falló (miniatura no se crea).

Aquí es donde se pone interesante, si funciono el mismo comando exacto en mi concha, funciona.

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$ 

He intentado utilizar una función PHP diferente como sistema, passthru pero no funcionó. Pensé que tal vez alguien aquí conocía la solución.

estoy usando

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

Gracias!

ACTUALIZACIÓN

he actualizado las siguientes dependencias

  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

Sin embargo, no se soluciona mis probl em.

segundo ACTUALIZACIÓN

fin encontré algo que podría ayudar, cuando la función se ejecuta esto es lo que se imprime en los registros de 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 

tercera ACTUALIZACIÓN

libiconv .2.dylib es la versión 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) 

cuarto ACTUALIZACIÓN

problema estaba relacionado con MAMP, ver la solución por debajo

+1

¡Muchas gracias! –

Respuesta

7

¡Solucionado!

Resulta que la variable de entorno DYLD_LIBRARY_PATH no se configuró correctamente.

Mac OS X Leopard viene con libiconv 7.0.0 pero requiere convertir 8.0.0 (ver segunda ACTUALIZACIÓN anterior)

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 y todas las dependencias se ha instalado con MacPorts bajo /opt/local. Esto requiere agregar manualmente la ruta/opt/local/lib a DYLD_LIBRARY_PATH.

Si añado el camino /opt/local/lib-DYLD_LIBRARY_PATH en el Mac OS X Leopard apachectl envvars el archivo /usr/sbin/envvars no funciona. ¿Por qué? Es porque no uso apache de Mac OS X Leopard, uso MAMP.

MAMP tiene su propio guión apachectl y su propio archivo de envvars.

he añadido el camino /opt/local/lib-DYLD_LIBRARY_PATH en el MAMP archivo apachectl envvars /Applications/MAMP/Library/bin/envvars

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

Ahora mis miniaturas PNG se están generando y no se generan errores en el registro de errores de Apache!

Espero que esto ayude a alguien y la próxima vez recordaré comprobar cada archivo de registro antes de pedir ayuda.

Phil

+0

Iba a sugerir que se trataba de un problema específico de Leopard después de leer sobre el problema COMMAND_MODE. Buen trabajo :) – defines

+0

hombre, esto no funciona para mí y estoy tirando de mi cabello aquí ... ¿Alguna otra instrucción que no se mencione aquí podría haber hecho? – mga

+0

hola ... Podría hacer un "mundo de hola" como 'exec (" convert logo: logo.gif ")' y funciona bien ... sin embargo, una conversión más compleja funcionará en shell pero no en exec() : '/ opt/local/bin/convert -size 758x185 /Aplicaciones/MAMP/htdocs/recetas/img/photo/old.tmp -crop 470x185 + 142 + 0! -quality 100 + profile "*"/Applications/MAMP/htdocs/recetas/img/photo/new.jpg' ... Estoy creando logo.gif en el mismo directorio que old.tmp, así que no es una cuestión de caminos (Además, la cosa funciona si copio/pego el comando en bash o sh. El error en apache (sin errores php) es 'sh: command_here: No hay tal archivo o directorio' – mga

1

Asegúrese de que el usuario que ejecuta el código php tiene los mismos permisos en los archivos y directorios.

+0

Sí, las imágenes y la carpeta de los pulgares también se pueden escribir en el mundo. – philhq

0

Esto debería ser obvio, pero asegúrese de comprobar cosas como el modo seguro de PHP, open_basedir, y si se ha desactivado exec.

+0

No se desactivan, pude generar miniaturas desde archivos JPG y JPEG pero no desde archivos PNG.Consulte la solución a continuación – philhq

5

Mi camino era/opt/local/bin, pero incluso añadiendo que a DYLD_LIBRARY_PATH no funcionaba. Finalmente cuando cambié simplemente ole PATH, funcionó a través de PHP.

; no funcionó ...

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

; DYLD_LIBRARY_PATH exportación

; ¡Esto funciona!

exportación PATH = "$ PATH:/opt/local/bin"

+0

Gracias, gracias, gracias! Esto me ayudó a resolver el problema :) – Stiropor

+0

¡Gracias! Sé que estos comentarios de "gracias" están desalentados, pero esto terminó una batalla larga y confusa para mí. –

Cuestiones relacionadas