2012-04-27 10 views
0

FPDFを使用してExpressionEngineからチャンネルファイルをPDFファイルにエクスポートしています。私が使用しているFPDFのものは以前に別のプロジェクトで使用していたコードなので、になるはずです。できるだけ早く彼らは私が取得機能に包まれますように、通常FPDFオブジェクトの仕事の方法、しかし:PHP&FDPFエラーExpressionEngineの '致命的なエラー:非オブジェクトのメンバー関数を呼び出す'

Fatal error: Call to a member function MultiCell() on a non-object 

だから、これは動作します:

include '../apps/assets/fpdf.php'; 
// setup the PDF object: 
$pdf = new FPDF(); 
$pdf->SetMargins(0,0,0); 
$pdf->SetAuthor("Author"); 
$pdf->addPage("P", "A4"); 
$pdf->SetTextColor(82,82,82); 

// write something to the PDF: 
$pdf->MultiCell(80, 6, "some text here", 0, "L"); 

しかし、これはしていません:

include '../apps/assets/fpdf.php'; 
// setup the PDF object: 
$pdf = new FPDF(); 
$pdf->SetMargins(0,0,0); 
$pdf->SetAuthor("Author"); 
$pdf->addPage("P", "A4"); 
$pdf->SetTextColor(82,82,82); 

writeStuff("some stuff to write"); 

function writeStuff($stuff) { 
    global $pdf; 
    $pdf->MultiCell(80, 6, $stuff, 0, "L"); 
} 

コードの最後のブロックは、上記のようにエラーをスローします。

まったく同じ設定が以前は機能していたので、変です。主な違いは、今回はPHPがExpressionEngineテンプレートでラップされていることです。テンプレートにはPHP解析が有効になっていますが、同じアプリケーションで複数のテンプレートを使用しています。

ExpressionEngineの解析順序と関係がありますか? $ writeオブジェクトが作成される前にメソッド 'writeStuff'が呼び出されていますか?

アイデア?

答えて

1

問題は、EECMSテンプレートのphpがeval()を使用して実行されていることです。これはあなたのPHPがローカルスコープで実行されていることを意味します。したがって、関数定義の内部と外部の変数にGLOBALキーワードを使用する必要があります。

例:偉大なKBの記事がありました

include '../apps/assets/fpdf.php'; 
// setup the PDF object: 
global $pdf; 
$pdf = new FPDF(); 

が、それが今なくなっているように思える:

<?php 

global $foo; 
$foo = 'Hello World!'; 

bar(); 

function bar() { 
    global $foo; 
    echo $foo; 
} 
?> 

は、だからあなたのテンプレートのために、単に次のように変更します。

http://web.archive.org/web/20090207200929/http://expressionengine.com/knowledge_base/article/my_php_functions_cannot_reference_global_php_variables/

役立ちます希望:私は、元のウェイバックのアーカイブを取得することができました!

+0

本当にありがとうございます。私自身でそれを決めることはできなかったでしょうか?) – Rein

関連する問題