使用ImageMagick和PHP的PDF缩略图

时间:2012-03-08 02:39:31

标签: php imagemagick

在搜索Google和SO之后,我发现了一些使用ImageMagick创建PDF文档缩略图的代码。

我遇到的麻烦就是将它实现到我的WordPress主题中。我认为我已经陷入了缓存脚本需要临时文件的路径。

我正如文章中所述使用它:

<img src="http://localhost/multi/wp-content/themes/WPalchemy-theme/thumbPdf.php?pdf=http://localhost/multi/wp-content/uploads/2012/03/sample.pdf&size=200 />

哪个必须正确(也许......但我认为我使用完整URL到实际文件是正确的),因为当我点击该URL时,我将被带到一个页面,该页面读取以下错误:

Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png

现在tmp是在thumbPdf.php脚本中定义的,但我对它应该是什么值感到困惑。它是网址还是路径?像timthumb.php一样,我可以使它相对于thumbPdf.php脚本吗? (我试过./cache这是timthumb中的设置 - 并确保在我的主题根目录中有一个/ cache文件夹,但无济于事)。另外,我在我的root中放了一个/ tmp文件夹,但仍然得到同样的错误。

那么如何配置 tmp 才能使其正常工作?

http://stormwarestudios.com/articles/leverage-php-imagemagick-create-pdf-thumbnails/

function thumbPdf($pdf, $width)
{
    try
    {
        $tmp = 'tmp';
        $format = "png";
        $source = $pdf.'[0]';
        $dest = "$tmp/$pdf.$format";

        if (!file_exists($dest))
        {
            $exec = "convert -scale $width $source $dest";
            exec($exec);
        }

        $im = new Imagick($dest);
        header("Content-Type:".$im->getFormat());
        echo $im;
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
}

$file = $_GET['pdf'];
$size = $_GET['size'];
if ($file && $size)
{
    thumbPdf($file, $size);
}

我看到了这个答案: How do I convert a PDF document to a preview image in PHP? 我即将去尝试下一步

1 个答案:

答案 0 :(得分:1)

错误告诉您需要的一切。

 Unable to read the file: tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png 

脚本当前尝试从服务器tmp /文件夹中读取文件。

 $tmp = 'tmp';
 $format = "png";
 $source = $pdf.'[0]';
 //$dest = "$tmp/$pdf.$format";
 $dest = "$pdf.$format";

请记住,在安全方面这看起来并不是那么好,有人可以通过给你的脚本格式错误的外部源pdf来利用ImageMagic bug来实现非常讨厌的事情。您至少应该检查图像是否来自允许的来源,例如来自同一主机的请求。

使用ImageMagic的最佳方法是始终保存生成的图像,并且只有在生成的图像不存在时才生成新图像。某些ImageMagic操作在大文件上非常繁重,因此您不希望给服务器带来负担。