尝试从symfony3中的全局命名空间加载类"Imagick"



所以我目前正在为symfony项目使用"Imagick"扩展,但是我收到此错误:

ClassNotFoundException:"试图从全局命名空间加载类"Imagick"。你忘了"使用"语句吗?

奇怪的是,它在所有本机 php 脚本中都能正常工作,但在 symfony 项目中不起作用!

我做了一些研究,我发现我也需要为 CLI 启用 imagick .. 但我没有找到任何方法来解释如何制作它。

因此,我通过以下代码片段验证了Imagick安装:

<?php
header('Content-type: image/jpeg');
$image = new imagick("C:/wamp64/www/test/image.jpg");
$image->thumbnailImage(100,0);
echo $image;

我可以看到正确加载的图像。

另外,当我从浏览器运行此脚本时:

<?php
if (extension_loaded('imagick')){
echo 'imagick is installed';
} else {
echo 'imagick not installed';
}
?>

我得到 :

imagick is installed

但是当我从命令行界面执行此文件时,我得到:

imagick not installed

在Symfony项目中,我得到这个错误日志:

Uncaught PHP Exception SymfonyComponentDebugExceptionClassNotFoundException: "Attempted to load class "Imagick" from the global namespace. Did you forget a "use" statement?" 

Symfony函数

private function createThumbnail($path, $dest, $width, $height)
{
$im = new Imagick();
$im->pingImage($path);
$im->readImage($path);
$im->thumbnailImage($width, $height);
$white=new Imagick();
$white->newImage($width, $height, "white");
$white->compositeImage($im, Imagick::COMPOSITE_OVER, 0, 0);
$white->setImageFormat('jpg');
$white->writeImage($dest);
$im->destroy();
$white->destroy();
}

环境

PHP 版本 => 7.1.9

系统 => 视窗 10

服务器 => Wamp64

Symfony 版本 => 3.1

编译器 => MSVC14 (Visual C++ 2015)

架构 => x64

IMAGIGECK模块版本=> 3.4.3

图像魔术版本 => 图像魔术 6.9.3-7 Q16 x64 2016-03-27

完整的 ImageMagick/Symfony 安装步骤如下(此处适用于 Windows):

  1. 从 https://pecl.php.net/package/imagick/3.5.1/windows 下载软件包
  2. 从 php_imagick-....zip php_imagick.dll 文件中提取,并将其保存到 PHP 安装的 ext 目录中
  3. 提取依赖项 对于 PHP 5.x/7.x:从 ImageMagick-....zip in 文件夹中以 CORE_RL 或 IM_MOD_RL 或 FILTER 开头的 DLL 文件中提取,并将它们保存到 PHP 根目录(您有 php.exe 的地方)或 PATH 变量中的目录: • 17 个文件 CORE_RL*.dll • 126 个文件 IM_MOD_RL*.dll • 1 个文件过滤器*.dll • 对于 PHP 8.x:从 php_imagick ....zip以 CORE_RL 或 IM_MOD_RL 或 FILTER 开头的 DLL 文件中提取,并将它们保存到 PHP 根目录(您有 php.exe 的目录)或 PATH 变量中的目录
  4. 将这一行添加到 php.ini 文件中:extension=php_imagick.dll
  5. 重新启动 Apache/NGINX Windows 服务(如果适用)
  6. 通过添加了特定 imagick 块的 phpinfo() 检查安装是否正确
  7. 不要忘记将use Imagick; 添加到您的php文件中

我找到了解决方案,我为有相同问题的人提供了答案:

您应该添加以下行

;on Windows:
extension=php_imagick.dll
;on UNIX:
extension = imagick.so

C:wamp64binphpphpx.x.xphp.ini

不要C:wamp64binapacheapachex.x.xbinphp.ini

因为第一个php.ini是PHP CLI使用的文件,所以由Symfony本地Web服务器使用。

祝您编码愉快!

最新更新