2009-12-22 36 views
14

在我的私人WAMP PC上運行一些PHP代碼時,我突然從服務器得到一個空白的響應 - 實際上沒有響應。沒有頭文件,沒有數據,PHP錯誤日誌中沒有任何內容,nada。我重新啓動了APACHE和PHP,但仍然沒有任何結果。我知道PHP工作,因爲我可以訪問其他PHP腳本就好了。PHP產生一個完全白頁,沒有錯誤,日誌或標題。

Firebug報告沒有標題,?字節,它只需要163ms「加載」(所以它不是超時)。我想過快速的內存消耗 - 但是我監控了我的PC內存,並沒有顯示任何尖峯。直到現在,錯誤和例外一直在正常工作。

什麼在世界上?

max_execution_time = 30 ; 
max_input_time = 60 ; 
max_input_nesting_level = 64 ; 
memory_limit = 500M ; 

error_reporting = E_ALL | E_NOTICE | E_STRICT 
display_errors = On 
log_errors = On 

:編輯:

我不會用10英尺極觸摸@。我認爲紅寶石的人會把它扔到那裏,所以程序員會放棄PHP。

無論如何,我啓用了xdebug,它沒有輸出任何研磨文件。然後,我採取了zombat的建議,並在頁面頂部放置了一個DIE(),它工作。我想我只是有一些非常奇怪的代碼,完全殺死PHP。即使錯誤被禁用或被@壓制,我仍然應該從服務器返回空頭內容!

如果我發現更多,我會回覆。

+0

它在哪裏登錄錯誤?也許它正在登錄到文件或stderr? – 2009-12-22 04:08:39

+1

如果您調用非PHP資源會發生什麼情況?那樣有用嗎?你可以嘗試phpinfo()來檢查你是否使用正確的php.ini? – 2009-12-22 04:09:24

+1

發佈不輸出任何內容的PHP代碼。 – Asaph 2009-12-22 04:12:36

回答

1

我猜這個問題的答案 - 事實證明,PHP 5.2.5無法處理遞歸死亡。

<?php 

class A 
{ 
    public function __construct() 
    { 
     new B; 
    } 
} 

class B 
{ 
    public function __construct() 
    { 
     new A; 
    } 
} 

new A; 

print 'Loaded Class A'; 

無頭,錯誤內容,日誌,Xdebug的轉儲,內存峯值,CPU峯值,服務器崩潰,或任何東西。大約150ms後PHP剛剛「結束」。奇怪的。

+0

它已經在PHP 5.3.0中修復了 '致命錯誤:達到'100'的最大功能嵌套級別,正在中止!' – Xeoncross 2009-12-22 23:53:35

+2

如果您有答案,則應將此問題標記爲已解決,以便其他人不浪費時間試圖幫助你。 – SamGoody 2009-12-23 07:18:06

+1

我不能,stackoverflow讓我等待接受它。再過十個小時,我將能夠關閉它。 – Xeoncross 2009-12-23 17:09:08

-2

你檢查了你的文件是否關閉?>標籤?或者更重要的是任何後面的空格......

6

你可以在這個目錄中有一個.htaccess文件,它修改了錯誤報告。

要測試,請嘗試明確地設置這些選項在你的PHP腳本的頂部,這給你帶來麻煩。

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

我也看到這是由過度熱心的反病毒軟件包引起的。一些包含網絡代理軟件來過濾互聯網和電子郵件。在這種情況下,該頁面將繼續加載到無限但始終完成。

0

檢查事件日誌。

1

檢查的php.ini關

+0

如果短打開標籤關閉,那麼PHP會溢出到渲染頁面。該頁面不會爲空。 – 2009-12-22 06:00:38

1

這裏最有可能的事情設置short_open_tag的值爲= On或short_open_tag的值爲=是Apache正在崩潰。也許通過Apache的錯誤日誌,或附加一個調試器。在尋找調試阿帕奇/ PHP程序在Windows

詳情可http://bugs.php.net/bugs-generating-backtrace-win32.php

+0

雖然在發生崩潰的情況下他會在事件日誌中找到記錄。比纏繞調試器更容易。 – 2009-12-22 05:59:57

+0

不是所有的Windows用戶,不知道事件日誌顯示這些東西:)謝謝。 – 2009-12-22 06:05:45

6

找到當心@(錯誤抑制)運營商,如果你有@ PHP會悄悄退出線路上的語法錯誤。

要檢測到這種情況,請使用set_error_handler並編寫自己的錯誤處理程序,但在使用@時仍會調用錯誤。

+1

+1 - 錯誤抑制運算符是個人的剋星。 – zombat 2009-12-22 07:41:57

+0

有一個pecl擴展可以用來幫助解決這個問題。 這是適當的標題爲尖叫:http://pecl.php.net/scream – 2009-12-22 13:38:48

+0

當使用@include(_once)'文件';它不僅不報告包含失敗,而且還會抑制該文件產生的錯誤。 – 2012-09-10 15:19:28

8

從控制檯運行頁面,您將看到錯誤消息。

// nix 
php yourFile.php 

// Windows 
c:\path\to\php.exe yourFile.php 
6

你說其他PHP腳本正在工作,這表明它可能不是Apache的問題。您似乎也已將所有日誌記錄設置更正,並且沒有任何日誌記錄,因此很可能PHP在輸出任何內容之前正常退出。以下情況之一可能屬實:

  • 錯位exit()聲明?你正在研究代碼,也許你添加了一個快速的exit()來檢查一些東西,並忘記刪除它?
  • don.neufeld關於檢查使用@操作符的想法,它抑制了任何錯誤消息,過去花費我幾個小時的調試時間。絕對是要尋找的東西。

在這樣的情況下,窮人的調試方法可以產生一些快速結果。在這裏討論的腳本中,輸入exit('wtf');作爲第一行。這是否運行?無論結果如何,該測試的結果立即排除各種可能性。如果你沒有得到任何輸出,那麼它可能是一個服務器級別的問題(配置,壞模塊等),但要小心任何更高級別的緩衝。如果你確實得到了輸出,那麼你知道服務器沒問題,並且腳本中的問題更深,在這種情況下,您可以將幾行內容調出,然後沖洗並重復。這不是一種優雅的調試方式,但它很快且很髒,您可能會在幾分鐘內找到問題。

+4

+1令人敬畏的退出短語 – Xeoncross 2009-12-22 15:58:55

0

發生這種情況時,通常需要儘可能多地刪除代碼並查看是否可以在頁面上顯示某些內容。

這可能是由於您的代碼中某個未封閉的引用或未封閉的大括號。這可能會導致echo語句被視爲文本或其他函數等。

而且,雖然所有錯誤都應該被報告,但我發現並非所有的錯誤都被實際報告,可能是因爲ini設置在共享主機不在我的範圍內。

評論並不總是足夠的 - 不知道爲什麼不。當發生這種情況時,我通常會發現它最快只是爲了複製頁面,然後慢慢剪切並粘貼這些部分,直到找到錯誤,之後我可以自己踢出一個愚蠢的錯字。

+0

確實如此,但即使是拼寫錯誤也會導致某種形式的錯誤。 – Xeoncross 2009-12-22 23:15:19

1

要激活錯誤顯示在你的PHP代碼的情況下,你看不到任何東西,插入

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

例子,其中本potentialy爲您節省大量的時間:

這段代碼在一個默認的Joomla 。PHP模板文件顯示,沒有錯誤味精和一個空白頁沒有行20 21

17 <?php if ($params->get('title_article_linkable')) { ?> 
18  <a href="<?php 
19   $url = JRoute::_(ContentHelperRoute::getArticleRoute($item->id,$item->catid)); 
20   ini_set('display_errors',1); 
21   error_reporting(E_ALL); 
22   echo $url; ?>"> 
23  <?php echo $this->item->title; ?></a> // should be $item->title !! 
24 <?phpLL000000 } else { ?> 
25  <?php echo $item->title; ?> 
26 <?php } ?> 

輸出:

enter image description here

相關問題