0

Zend で PDF を生成するスクリプトがあります。イメージをpdfに変換するスクリプトをサーバー上の別のディレクトリにコピーしました。エラーが表示されます:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cannot create image resource. 
File not found.' in /kalendarz/Zend/Pdf/Resource/ImageFactory.php:38 
 Stack trace: 
 #0 /kalendarz/Zend/Pdf/Image.php(124): Zend_Pdf_Resource_ImageFactory::factory('data/0116b4/cro...') 
 #1 /kalendarz/cms.php(56): Zend_Pdf_Image::imageWithPath('data/0116b4/cro...') 
 #2 {main} thrown in /kalendarz/Zend/Pdf/Resource/ImageFactory.php on line 38

ウェブサイトのコード、画像へのリンクの例 (http://tinyurl.com/8srbfza):

else if($_GET['action']=='generate') {
    //1 punkt typograficzny postscriptowy (cyfrowy) = 1/72 cala = 0,3528 mm
    function mm_to_pt($size_mm) {
      return $size_mm/0.3528;
    }

    require_once("Zend/Pdf.php");

    $pdf = new Zend_Pdf(); 

    $page_w = mm_to_pt(100);
    $page_h = mm_to_pt(90);

    $page = $pdf->newPage($page_w.':'.$page_h.':'); 
    $pdf->pages[] = $page; 

    $imagePath= 'data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg'; //to nie jest miniaturka
    $image = Zend_Pdf_Image::imageWithPath($imagePath);


    $left = mm_to_pt(0);
    $right = mm_to_pt(100);
    $top = mm_to_pt(90);
    $bottom = mm_to_pt(0);

    $page->drawImage($image, $left, $bottom, $right, $top);     

    $pdfData = $pdf->render(); 

    header("Content-Disposition: inline; filename=".$_GET['id'].".pdf"); 
    header("Content-type: application/x-pdf"); 
    echo $pdfData; 
    die();
  }
4

2 に答える 2

2

Zend_Pdf_Image::imageWithPath は有効なファイルを想定し、is_file 関数呼び出しを使用してファイルの存在を確認します。

まず、相対パスを使用する代わりに、画像への絶対パスを使用します。APPLICATION_PATH を参照して、絶対パスを指定できます。例えば、

  APPLICATION_PATH . '/../public/data

コードで APPLICATION_PATH がまだ定義されていない場合は、このコードを public/index.php に貼り付けます。

 defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

次に、'data/'.$ GET['id'].'/crop '.$_GET['id'].'.jpg' が存在するかどうかを確認します。また、PHP がアクセスするための適切な権限がファイルにあるかどうかを確認してください。

注 : $_GET の代わりにZend リクエスト オブジェクトを使用してください。

于 2012-10-11T23:58:29.087 に答える
0

絶対パスを使用します。

$imagePath = '/kalendarz/data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg';

また:

$imagePath = APPLICATION_PATH.'/../data/'.$_GET['id'].'/crop_'.$_GET['id'].'.jpg';

に何らかの検証を行うこともできます$_GET['id']

于 2012-10-11T23:56:09.647 に答える