【问题标题】:Imagick PHP 5.4 extension does not work with relative paths. (windows)Imagick PHP 5.4 扩展不适用于相对路径。 (视窗)
【发布时间】:2012-04-14 20:01:44
【问题描述】:

我正在尝试在 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'); 因为我得到异常:

致命错误:未捕获的异常“ImagickException”和消息“无法打开图像 `a.jpg”:D:\Web\i\index 中没有此类文件或目录 @error/blob.c/OpenBlob/2614。 php:3 堆栈跟踪:#0 D:\Web\i\index.php(3): Imagick->__construct('a.jpg') #1 {main} throw in D:\Web\i\index.php在第 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']吗?
  • 这只是 Imagick 问题吗?你能做echo __DIR__ 并检查它是否不是你的工作目录吗?
  • Ben:我的问题是,如何让 imagick 使用当前目录 (D:\web\i) 作为工作目录而不是 apache 根目录 (C:\Program Files (x86)\Apache24) (因为它在旧 PHP 版本中工作)
  • dev-null-dwaller:这只是想象的问题: echo DIR 的输出是 D:\Web\i (D:\web 是 apache http root,i 是test srcipt 和 a.jpg 所在的文件夹)
  • @BenCarey:我可以使用 __ DIR __ 。 'a.jpg' 并且它正在工作。我只是想知道是否有办法在没有 __ DIR __ 的情况下使其工作。我所有的 imagick srcipts 都是使用相对路径(如 ../images/x.jpg)编写的,在 PHP5.4 中,这不再有效。所以我想知道是否有办法让它再次工作。

标签: php windows relative-path imagick


【解决方案1】:

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

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

与此同时,您可以使用__DIR____FILE__ 构造绝对路径来解决此问题。

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

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

【讨论】:

  • 谢谢,这个解决方法有效。实际上,更好的方法(对我来说)是 realpath('a.jpg');它的工作没有任何问题。我只是想弄清楚,如果其他人有类似的问题。我尝试了 2 个不同的 php_imagick.dll(我无法在 Windows 下自己编译它)和 4 个不同的 Imagick 版本(安装程序),但我认为这不是真正的问题,因为使用绝对路径 imagick 工作正常。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-29
  • 1970-01-01
  • 2011-07-12
  • 1970-01-01
  • 2015-05-14
  • 2017-06-01
  • 1970-01-01
相关资源
最近更新 更多