2012-09-27 37 views
0

我在使用requirerequire_once時遇到了一些問題,因爲代碼在調用後暫停執行,我正在努力尋找究竟是什麼導致了問題。PHP - 調試需要

我檢查了文件存在,可以閱讀(通過file_existsis_readable),但這兩個似乎是真實的,所以我有點難住。

require_once('file1.php'); 
print('a'); 
$file = 'file2.php'; 
if (!file_exists($file)) { die('file does not exist'); } 
if (!is_readable($file)) { die('cannot read file'); } 
require_once($file); 
print('b'); 

上面的代碼只輸出'a',之後什麼也沒有。

服務器上的另一個文件以相同的方式使用兩個有問題的文件都沒有問題。

還有什麼我可以檢查?

任何幫助,將不勝感激。

編輯:

設置error_reporting(E_ALL)不改變輸出。

將文件路徑更改爲同一目錄中的空白文件會將輸出更改爲'ab',表明require已經工作並且暗示它們是file2.php的問題,但是服務器上的另一個文件成功使用這些文件完全相同的方式。

爲file2.php運行php -l不會返回錯誤。

評論第一個要求沒有區別。

EDIT2:

問題是與以class_exists打個電話,在5.0版本中行爲的變化做自動加載到去做。有問題的代碼是在升級到5.0之前編寫的。

回答

2

設置error_reporting(E_ALL)並嘗試包括一個空文件而不是file2.php

也許file2.php有停止流動

+0

感謝您的建議。我已經更新了當我同時執行上述操作時發生的情況。更改錯誤報告似乎沒有什麼區別,將路徑更改爲空文件工作正常。但服務器上的另一個文件成功使用此文件。 –

+0

也許使用該文件的其他人設置了file2.php使用的某些var,而不是 – dynamic

+0

似乎並非如此,它使用與文件頂部完全相同的代碼。 –

1

有可能是一個錯誤的地方在file2.php文件中的一些錯誤。您應該啓用錯誤報告:

error_reporting(E_ALL | E_STRICT); 
ini_set('display_errors', 1); 

失敗require_once的情況下,錯誤報告水平將E_COMPILE_ERROR

UPDATE 檢查是否file1file2定義函數具有相同的名稱,或者有其他不兼容的邏輯。

+0

感謝您的建議,但服務器上的另一個文件以完全相同的方式使用file2,沒有任何問題,這有點令人困惑。當通過PHP lint(php -l)時,file2.php也不會返回錯誤。 –

+0

@MitchS請參閱更新 –

+0

謝謝,但不能這樣,因爲另一個文件(在不同的目錄中)以同樣的方式同時使用file1和file2。 –