2012-03-31 68 views
14

我试图在windows上安装imagick PHP扩展。它正在PHP 5.2,PHP 5.3上工作,但我在PHP 5.4中遇到了问题。Imagick PHP 5.4扩展不支持相对路径。 (windows)

Imagick版本:ImageMagick-6.7.6-3-Q16-windows-dll。模块正在工作。我可以在phpinfo()中看到imagick。

问题是,imagick无法识别文件的相对路径。举例来说,如果我有简单的的index.phpA.JPG在同一文件夹,我不能使用$im = new imagick('a.jpg');因为我得到异常:

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

但是当我使用绝对路径$im = new imagick('D:\web\i\a.jpg');是加工。

我发现,Imagick使用Apache核心dir作为参考。我保存了没有路径的图像:

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

而且我发现它在C:\ Program Files文件(x86)的\ Apache24 \这个的,是什么-IM-寻找-for.jpg

的问题是,我所有的旧脚本写有相对路径,我想countinue使用它们。

我不知道,如果问题是在imagick本身,或PHP 5.4中的某个地方。

预先感谢您

+0

什么是你的问题?你不能使用'$ _SERVER ['DOCUMENT_ROOT']'? – 2012-03-31 09:56:40

+0

这是唯一的Imagick问题吗?你可以做'echo __DIR__'并检查它是否不是你的工作目录? – 2012-03-31 10:27:29

+1

Ben:我的问题是,如何让imagick使用当前目录(D:\ web \ i)作为工作目录而不是apache根目录(C:\ Program Files(x86)\ Apache24 \)(因为它工作在旧的PHP版本) – 2012-03-31 11:33:06

回答

10

听起来像是你可能已经出土的错误。

我建议在http://bugs.php.net/report.php

报告它在此期间,你可以解决它通过使用__DIR____FILE__构建一个绝对路径。

例如,使用该脚本的目录,请执行下列操作:

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

谢谢,此解决方法正在工作。实际上,更好的方式(对我来说)是realpath('a。JPG');它的工作没有任何问题。我只是想弄明白,如果别人有类似的问题。我尝试了2个不同的php_imagick.dll(我不能在windows下自己编译它)和4个不同的Imagick版本(安装程序),但我认为这不是真正的问题,因为绝对路径imagick工作正常。 – 2012-03-31 15:24:32