使用ImageMagick和PHP生成PDF的缩略图图片

3
在Google和SO上搜索后,我发现这段代码可以使用ImageMagick创建PDF文档的缩略图。
对我来说困难在于将其实现到我的WordPress主题中。我认为我卡在了脚本需要用于临时文件的缓存路径上。
按照文章中所描述的方法使用它: 这应该是正确的(也许...但我认为我使用实际文件的完整URL是正确的),因为当我点击该URL时,我会看到一个页面显示以下错误:
无法读取文件:tmp/http://localhost/multi/wp-content/uploads/2012/03/sample.pdf.png
现在tmp在thumbPdf.php脚本中被定义,但我不确定它的值应该是什么。它是一个URL还是一个路径?像timthumb.php一样,我可以使它相对于thumbPdf.php脚本吗?(我尝试过./cache,这是timthumb的设置,并确保在我的主题根目录中有一个/cache文件夹,但都没有成功)。另外,请注意我在我的根目录中放置了一个/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);
}

我看到了这个答案: 如何在PHP中将PDF文档转换为预览图像? 我马上要去尝试它。
1个回答

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";

记住,从安全角度来看,这看起来并不好,有人可以利用ImageMagic漏洞通过提供格式不正确的外部源PDF来实现非常恶劣的事情。你应该至少检查图像是否来自允许的源,比如请求是否来自同一主机。
与ImageMagic一起工作的最佳方式是始终保存生成的图像,并仅在生成的图像不存在时生成新图像。某些ImageMagic操作对大文件的负担很重,因此您不希望使服务器过载。

谢谢!非常好的答案和技巧。不幸的是,我已经不再参与这个项目了,所以无法真正测试它。 - helgatheviking

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