2012-03-08 14 views
3

GoogleとSOを検索した後、ImageMagickを使用してPDF文書のサムネイルを作成するためのコードを見つけました。ImageMagickとPHPを使用した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を使用するのが正しいだと仮定)、なぜなら

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

今すぐtmpはthumbPdf.phpスクリプトで定義されていますが、私はそれは価値があるべきだものにのように混乱しています:私はそのURLをクリックしたとき、私は次のエラーを読み込むページに取られています。それはURLかパスか? timthumb.phpと同様に、thumbPdf.phpスクリプトに相対的にすることはできますか? (私は./​​cacheを試してみましたが、これはタイムスタンプの設定であり、私のテーマルートには/ cacheフォルダがあり、無駄です)。また、fyi私のルートに/ tmpフォルダを入れても、同じエラーが表示されます。

このようにするにはどうすればtmpを設定すればよいですか?

私はこの答え見ている
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); 
} 

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

How do I convert a PDF document to a preview image in PHP? をし、それが次の

答えて

1

エラーはあなたが必要なすべてを伝えてみて行くことを約思います。

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

スクリプトは現在、サーバーtmp/folderからファイルを読み取ろうとします。

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

これは本当に良い見ていないsecuritywiseを覚えて、誰かがあなたのスクリプト不正な外部ソースのPDFを与えることによって、非常に嫌なことを達成するためにImageMagicのバグを悪用する可能性があります。少なくとも、同じホストからの要求などの許可されたソースからのイメージであるかどうかを確認する必要があります。

ImageMagicを使用する最も良い方法は、生成されたイメージを常に保存し、生成されたイメージが存在しない場合にのみ新しいイメージを生成することです。いくつかのImageMagic操作は大きなファイルではかなり重いため、サーバーに負担をかけることはありません。

+0

ありがとうございます!素晴らしい答えと大きなヒント。残念ながら、私はもうこのプロジェクトに取り組んでいないので、実際にこれをテストする方法はありません。 – helgatheviking

関連する問題