ImageMagick安装MediaTemple GridServer

9
我已按照知识库文章的说明启用了ImageMagick扩展程序。
基本上,只需将以下行添加到php.ini文件中:
open_basedir = /nfs:/tmp:/usr/local:/etc/apache2/gs-bin:/usr/bin/convert

然而,这似乎不起作用。
这个脚本可以很好地输出版本号:
$IM_version=shell_exec("/usr/bin/convert -version");
echo $IM_version;

然而,当我尝试使用 Imagick 类时,出现错误。

try
{
        /*** a new imagick object ***/
        $im = new Imagick();

        /*** Create a red rectangle  ***/
        $im->newImage( 200, 100, "red", "png" );

        /*** write image to disk ***/
        $im->writeImage( '/tmp/rectangle.png' );

        echo 'Image Created';
}
catch(Exception $e)
{
        echo $e->getMessage();
}

错误:
Fatal error: Class 'Imagick' not found in /xxxxxxxxxxxxxxx/html/mt.php on line 8

你有没有想法我做错了什么或下一步的故障排查是什么?

我已经联系了MediaTemple支持,他们只是说:“抱歉,因为脚本输出版本号证明它已安装”。


2
那篇KB文章使你能够从PHP脚本中调用ImageMagick cli工具,但它并没有安装Imagick PEAR类(http://www.php.net/manual/en/book.imagick.php)。我没有看到在(gs)上使用Imagick()的简单方法。可能需要从源代码编译,并将扩展存储在本地路径中。我会尝试一下。 - Chris Rasco
1个回答

20

好的,我已经搞定了,但是这有点棘手。下面来讲解一下...

首先,您需要从源代码安装ImageMagick。如果您已经可以访问'MagickWand-config',则此步骤可能是可选的,但它不在我的路径中。以下是我遵循的步骤,将其安装到(gs)上的另一个目录中:

注意:截至本文发布时,最新版本为6.8.9.3。

$ wget http://www.imagemagick.org/download/ImageMagick-6.8.9-3.tar.gz
$ tar xvfz ImageMagick-6.8.9-3.tar.gz
$ cd ImageMagick-6.8.9-3
$ mkdir /home/#####/etc/imagemagick
$ ./configure --prefix=/home/#####/etc/imagemagick
$ make
$ make install

Imagick PHP类是一个PECL扩展,因此我们将使用提供的Media Temple KB来安装它,只需进行一项更改即可。以下是步骤:

$ export SITEID=`pwd | awk -F\/ '{ print $3 }'`
$ export PHPPATH=`php-stable -i | grep "Configure Command" | perl -pe "s/.*'.\/configure'\s*?'--prefix\=(.*?)'.*/\1/"`
$ mkdir /home/$SITEID/data/lib
$ mkdir /home/$SITEID/data/lib/php/
$ wget http://pecl.php.net/get/imagick && tar zxvf imagick && cd imagick-* && $PHPPATH/bin/phpize

在这里,我们的脚本与指令有所不同。我们需要指定到我们的ImageMagick安装路径以使用'MagickWand-config'。如果未指定,则会看到以下错误:

checking ImageMagick MagickWand API configuration program... configure: error: not found. Please provide a path to MagickWand-config or Wand-config program.

如果您使用了ImageMagick源安装的替代位置,请将'--with-imagick'的路径替换为该路径。

$ ./configure --with-php-config=$PHPPATH/bin/php-config --with-imagick=/home/#####/etc/imagemagick

恢复正常指示:

$ make && cp modules/*.so /home/$SITEID/data/lib/php

更新您的php.ini文件,其应位于/home/#####/etc/php.ini,并添加以下2行:

extension_dir=/home/#####/data/lib/php/

extension = imagick.so

完成后,请运行以下脚本:

<?php

$IM_version=shell_exec("/usr/bin/convert -version");
echo $IM_version;

if (!extension_loaded('imagick'))
{
    echo "imagick not installed\n";
}
else
{
    echo "imagick installed\n";
}


try
{
        /*** a new imagick object ***/
        $im = new Imagick();

        /*** Create a red rectangle  ***/
        $im->newImage( 200, 100, "red", "png" );

        /*** write image to disk ***/
        $im->writeImage( '/tmp/rectangle.png' );

        echo 'Image Created';
}
catch(Exception $e)
{
        echo $e->getMessage();
}

输出:

Version: ImageMagick 6.6.0-4 2012-05-03 Q16 http://www.imagemagick.org
Copyright: Copyright (C) 1999-2010 ImageMagick Studio LLC
Features: OpenMP 

imagick installed
Image Created

我按照当前版本ImageMagick-6.9.1-0.tar.gz的说明进行操作,一切都完美运行。你们太棒了。 - Jorge Orpinel Pérez
2
这些指令完美地运行了!只有一个小提示:如果你的PHP版本不是稳定版而是最新版,你需要用下面这行代码替换原来的php-stable:$ export PHPPATH=php-latest -i | grep "Configure Command" | perl -pe "s/.*'.\/configure'\s*?'--prefix\=(.*?)'.*/\1/" - user2089160
这很棒。我已经通过上面的步骤了,但似乎仍然存在一些问题。当我获取IM版本时,它返回默认安装的MT GS版本(6.7.7-10),而不是我安装的版本(7.x)。有任何想法为什么会出现这种情况吗?现在当我尝试图像转换时,它们只是挂起:/ - philzelnar
@philzelnar 你更新了你的php.ini文件吗?你是通过php还是cli来进行操作的? - Chris Rasco
这些指令仍然非常有效!感谢Chris和Rich。ImageMagick现在已经更新到版本7。如果您仍想使用版本6,则可能需要调整下载URL为legacy.imagemagick.org。例如: $ wget http://legacy.imagemagick.org/download/ImageMagick-6.9.11-10.tar.gz - Jim
@Jim 很高兴听到这个消息! - Chris Rasco

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