2012-04-27 3 views
0

FPDF를 사용하여 ExpressionEngine에서 채널 데이터를 PDF 파일로 내보내고 있습니다. 내가 사용하고있는 FPDF- 물건들은 이전에 다른 프로젝트에서 사용한 코드이므로, 이되어야한다. 정상 FPDF 오브젝트 작업 방법,하지만 즉시이 함수에 싸여 얻을 나는 얻을 :PHP & FDPF 오류 ExpressionEngine에서 '치명적인 오류 : 비 객체의 멤버 함수 호출'

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

을하지만이되지 않습니다 :

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

writeStuff("some stuff to write"); 

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

마지막 코드 블록은 위에 게시 된 오류를 발생시킵니다.

정확한 설정이 이전에 작동했기 때문에 이상합니다. 가장 큰 차이점은 이번에는 PHP가 ExpressionEngine 템플릿으로 싸여 있다는 것입니다. 템플릿은 PHP 구문 분석을 사용하도록 설정되어 있으며 많은 PHP가 포함 된 동일한 응용 프로그램에서 다른 템플릿을 사용하고 있습니다.

ExpressionEngine의 구문 분석 순서와 관련이 있습니까? $ write 오브젝트가 생성되기 전에 'writeStuff'메소드가 호출되고 있습니까?

아이디어가 있으십니까?

답변

1

문제는 EECMS 템플릿의 PHP가 eval()을 사용하여 실행된다는 것입니다. 이것은 PHP가 로컬 범위에서 실행되고 있음을 의미합니다. 따라서 함수 정의 안팎의 변수에 GLOBAL 키워드를 사용해야합니다.

예 : 좋은 자료 문서로가 사용

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

관련 문제