2012-03-31 29 views
14

Estoy tratando de instalar la extensión de PHP de imagick en Windows. Estaba trabajando en PHP 5.2, PHP 5.3 pero tengo problemas con PHP 5.4.La extensión Imagick PHP 5.4 no funciona con rutas relativas. (windows)

Imagick versión: ImageMagick-6.7.6-3-Q16-windows-dll. El módulo está funcionando. Puedo ver imagick en phpinfo().

El problema es que imagick no reconoce la ruta relativa a los archivos. Por ejemplo, si tengo sencilla index.php y a.jpg en la misma carpeta, no puedo usar $im = new imagick('a.jpg'); porque consigo excepción:

Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image `a.jpg': No such file or directory @ error/blob.c/OpenBlob/2614' in D:\Web\i\index.php:3 Stack trace: #0 D:\Web\i\index.php(3): Imagick->__construct('a.jpg') #1 {main} thrown in D:\Web\i\index.php on line 3

Pero cuando se utiliza la ruta absoluta $im = new imagick('D:\web\i\a.jpg'); Es trabajando.

Me enteré de que Imagick utiliza el núcleo de Apache como referencia. Guardé la imagen sin ruta:

$ im-> writeImage ('this-is-what-im-looking-for.jpg');

y lo encontré en C: \ Archivos de programa (x86) \ Apache24 \ esto-es-lo-im-looking-for.jpg

El problema es, que todos mis viejos guiones son escrito con rutas relativas y me gustaría contar con su uso.

No sé, si el problema está en imagick, o en algún lugar de PHP 5.4.

gracias de antemano

+0

¿Cuál es tu pregunta? ¿No puedes usar '$ _SERVER ['DOCUMENT_ROOT']'? –

+0

¿Es este el único problema de Imagick? ¿Puedes hacer 'echo __DIR__' y verificar si no es tu directorio de trabajo? –

+1

Ben: mi pregunta es cómo hacer que imagick use el directorio actual (D: \ web \ i) como directorio de trabajo en lugar del directorio raíz de apache (C: \ Archivos de programa (x86) \ Apache24 \) (como estaba trabajando en versiones anteriores de PHP) –

Respuesta

10

Suena como que podría haber descubierto un error.

me gustaría sugerir que la presentación de informes en http://bugs.php.net/report.php

Mientras tanto, se puede evitar mediante el uso de __DIR__ o __FILE__ para construir una ruta absoluta.

Por ejemplo, para utilizar el directorio de la secuencia de comandos, haga lo siguiente:

$im = new imagick (__DIR__ . DIRECTORY_SEPARATOR . 'a.jpg'); 
+2

gracias, esta solución está funcionando. en realidad, la mejor forma (para mí) es el camino real ('a.jpg '); está funcionando sin ningún problema. Solo intentaba averiguar si alguien más tenía un problema similar. Probé con 2 php_imagick.dll diferentes (no puedo compilarlo solo en Windows) y 4 versiones diferentes de Imagick (instaladores), pero creo que este no es el problema real, porque con rutas absolutas imagick está funcionando bien. –