Imagick PHP 5.4扩展不支持相对路径(Windows)。

14

我正在尝试在Windows上安装imagick PHP扩展程序。它可以工作于PHP 5.2、PHP 5.3版本,但是在PHP 5.4版本中遇到了问题。

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核心目录作为参考。如果我不带路径保存图像:

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

我在C:\Program Files (x86)\Apache24\this-is-what-im-looking-for.jpg中发现了它。

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

我不知道问题是在imagick本身还是在PHP 5.4中。

非常感谢您的帮助!


你有什么问题吗?你不能使用 $_SERVER['DOCUMENT_ROOT'] 吗? - Ben Carey
1
Ben:我的问题是,如何使imagick使用当前目录(D:\ web \ i)作为工作目录,而不是Apache根目录(C:\ Program Files(x86)\ Apache24 \)(就像在旧的PHP版本中一样)。 - filip.karas
dev-null-dwaller:这只是imagick的问题:echo __DIR__的输出是D:\Web\i(D:\web是apache http根目录,i是测试脚本和a.jpg所在的文件夹)。 - filip.karas
@user1112626 - 在这种情况下,您应该填写错误报告 https://bugs.php.net/report.php,并提供有关您的php/apache/imagick版本的一些信息。 - dev-null-dweller
我想插一句话并宣布,在Windows 7上使用Apache和PHP 5.3时,我也遇到了同样的问题。也许与PHP无关,更可能与DLL有关。 - Funktr0n
显示剩余2条评论
1个回答

10

听起来你可能发现了一个 bug。

我建议在 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可以正常工作。 - filip.karas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接