2012-10-23 105 views
0

我的php代碼(這是一個導出pdf和excel功能,我使用Yii框架)在我的本地機器上運行良好。 但是,當我把代碼放在linux服務器上, 我得到一個錯誤。我使用echo來逐步調試它,最後我發現它在這一步失敗了。 $ objWriter->保存( 'PHP://輸出'); (這是使用PHPExcel)。在我的linux服務器,我得到了一個PHP錯誤,但我看不到錯誤,爲什麼?

但我不能看到它是什麼錯誤。

我設置了display_errors = On,並且還設置了error_log。 但我仍然無法看到錯誤信息。

+1

別忘了[error_reporting](http://php.net/manual/en/errorfunc.configuration.php#ini.error-reporting) –

+0

實際的錯誤可能是一個權限問題 – Cfreak

+1

你有沒有檢查過日誌文件?它是一個共享主機?如果是這樣,你可以去控制面板,應該有一個工具來顯示訪問/錯誤日誌(PHP,Apache等)祝你好運! –

回答

2

請確保您有以下設置:

error_reporting(E_ALL); // or possibly: E_ALL & ~E_NOTICE 
ini_set('display_errors', TRUE); 
ini_set('scream.enabled', TRUE); // this overrides the @ operator 

如果你想要的任何錯誤,以阻止腳本的執行,然後定義錯誤處理功能:

function my_error_handler($errno, $errstr, $errfile, $errline, $errcontext) { 
    file_put_contents(
     'custom_log_file.log', 
     '#'.$errno.' '.$errfile.':'.$errline.' '.$errstr 
    ); 
    // throw new Exception('#'.$errno.' '.$errfile.':'.$errline.' '.$errstr); 
    die('#'.$errno.' '.$errfile.':'.$errline.' '.$errstr); 
} 
set_error_handler('my_error_handler'); 

如果您選擇拋出異常從你的錯誤處理函數(這很可能你不會期望被捕獲 - 它們只是爲了調試目的),你可以設置一個異常處理程序。

function my_exception_handler() { 
    // here you code some nice visuals for your error handling 
} 
set_exception_handler('my_exception_handler'); 

在這兩種情況下,你可以var_dump(debug_backtrace());看到發生錯誤的數據上下文。

如果PHP文件是第一次訪問(即它的URL位於瀏覽器的地址欄中),並且它有語法錯誤,則無錯誤報告機制會顯示該錯誤。

您可以使用linux CLI php -l filename.php來檢查文件中的語法錯誤。或者你可以創建另一個文件x.php,其中只包含一個包含到filename.php

+0

嘗試 { $ objWriter-> save('php:// output'); } catch(Exception $ e) { echo'12'; } – Gcaufy

+0

這是行不通的。它無法捕捉到這個錯誤。 – Gcaufy

+0

我也試過error_reporting(E_ALL); ini_set('display_errors',TRUE); ini_set('scream.enabled',TRUE); – Gcaufy