尝试从 symfony3 中的全局命名空间加载 class "Imagick"
Attempted to load class "Imagick" from the global namespace in symfony3
所以我目前正在为一个 symfony 项目使用 "Imagick" 扩展,但是我得到这个错误:
ClassNotFoundException:“试图从全局命名空间加载 class "Imagick"。您是否忘记了 "use" 语句?”
奇怪的是,它在所有本机 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 Symfony\Component\Debug\Exception\ClassNotFoundException: "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
系统 => Windows 10
服务器 => Wamp64
Symfony 版本 => 3.1
编译器 => MSVC14 (Visual C++ 2015)
架构 => x64
imagick 模块版本 => 3.4.3
ImageMagick 版本 => ImageMagick 6.9.3-7 Q16 x64 2016-03-27
我找到了解决方案,我把答案贴给有同样问题的人:
您应该添加以下行
;on Windows:
extension=php_imagick.dll
;on UNIX:
extension = imagick.so
到C:\wamp64\bin\php\phpx.x.x\php.ini
不会C:\wamp64\bin\apache\apachex.x.x\bin\php.ini
因为第一个 php.ini 是 PHP CLI 使用的文件,所以由 Symfony 本地 Web 服务器使用。
编码愉快!
完整的ImageMagick/Symfony安装步骤如下(此处为Windows):
- 从https://pecl.php.net/package/imagick/3.5.1/windows
下载包
- 从php_imagick-中提取….zip php_imagick.dll文件,并将其保存到PHP安装的ext目录
- 提取依赖项
• 对于PHP 5.x/7.x:从ImageMagick-….zip 中提取位于bin 文件夹中以CORE_RL 或IM_MOD_RL 或FILTER 开头的DLL 文件,以及将它们保存到 PHP 根目录(您有 php.exe 的位置),或保存到 PATH 变量中的目录:
• 17 个文件 CORE_RL*.dll
• 126 个文件 IM_MOD_RL*.dll
• 1 个文件 FILTER*.dll
• For PHP 8.x: Extract from php_imagick-….zip以CORE_RL或IM_MOD_RL或FILTER开头的DLL文件,并将它们保存到PHP 根目录(你有 php.exe 的地方),或者到你的 PATH 变量中的目录
- 将此行添加到您的 php.ini 文件中:extension=php_imagick.dll
- 重新启动 Apache/NGINX Windows 服务(如果适用)
- 通过phpinfo()检查安装是否正确,其中添加了特定的imagick块
- 不要忘记添加使用 Imagick;到您的 php 文件
所以我目前正在为一个 symfony 项目使用 "Imagick" 扩展,但是我得到这个错误:
ClassNotFoundException:“试图从全局命名空间加载 class "Imagick"。您是否忘记了 "use" 语句?”
奇怪的是,它在所有本机 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 Symfony\Component\Debug\Exception\ClassNotFoundException: "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
系统 => Windows 10
服务器 => Wamp64
Symfony 版本 => 3.1
编译器 => MSVC14 (Visual C++ 2015)
架构 => x64
imagick 模块版本 => 3.4.3
ImageMagick 版本 => ImageMagick 6.9.3-7 Q16 x64 2016-03-27
我找到了解决方案,我把答案贴给有同样问题的人:
您应该添加以下行
;on Windows:
extension=php_imagick.dll
;on UNIX:
extension = imagick.so
到C:\wamp64\bin\php\phpx.x.x\php.ini
不会C:\wamp64\bin\apache\apachex.x.x\bin\php.ini
因为第一个 php.ini 是 PHP CLI 使用的文件,所以由 Symfony 本地 Web 服务器使用。
编码愉快!
完整的ImageMagick/Symfony安装步骤如下(此处为Windows):
- 从https://pecl.php.net/package/imagick/3.5.1/windows 下载包
- 从php_imagick-中提取….zip php_imagick.dll文件,并将其保存到PHP安装的ext目录
- 提取依赖项 • 对于PHP 5.x/7.x:从ImageMagick-….zip 中提取位于bin 文件夹中以CORE_RL 或IM_MOD_RL 或FILTER 开头的DLL 文件,以及将它们保存到 PHP 根目录(您有 php.exe 的位置),或保存到 PATH 变量中的目录: • 17 个文件 CORE_RL*.dll • 126 个文件 IM_MOD_RL*.dll • 1 个文件 FILTER*.dll • For PHP 8.x: Extract from php_imagick-….zip以CORE_RL或IM_MOD_RL或FILTER开头的DLL文件,并将它们保存到PHP 根目录(你有 php.exe 的地方),或者到你的 PATH 变量中的目录
- 将此行添加到您的 php.ini 文件中:extension=php_imagick.dll
- 重新启动 Apache/NGINX Windows 服务(如果适用)
- 通过phpinfo()检查安装是否正确,其中添加了特定的imagick块
- 不要忘记添加使用 Imagick;到您的 php 文件