2011-10-18 71 views
1

我寫了一個輸出內容類型信息作爲頭的類,但這不起作用。閱讀PHP.net後,它指出在函數/類方法內設置PHP頭文件

記住header()函數之前的任何實際產量 發送,無論是普通的HTML標記,空行的文件,或者從PHP必須被調用。 使用include()或require(), 函數或其他文件訪問函數讀取代碼以及在調用header()之前輸出空格或空行 是非常常見的錯誤。

我不確定該怎麼做,因爲我無法在任何需要的地方硬編碼內容類型。有誰知道是否可以在函數/類中設置標題?

回答

0

頭文件一直在正確發送,但是我正在檢查我正在使用的文件的響應,並且沒有正確地從CURL獲得響應,如果這樣做合理的話!我只需要使用:

$httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); 
2

限制是必須在發送任何其他輸出之前發送標題。

最簡單的解決方案是啓用輸出緩衝。所以你可以在任何地方設置標題直到緩衝區被刷新。

您可以通過使用該功能ob_start

或者使用php.ini文件中的INI output_buffering指令做到這一點醚。

正如Brad指出的那樣,它不是最有效的解決方案,因爲它佔用服務器內存來緩衝輸出並延遲第一個字節的發送。

最好的解決方案是找到什麼在header調用之前發送輸出,並在可能的情況下延遲輸出。

我發現的一個很好的折衷方案是在開始時使用ob_start啓用輸出緩衝,並在頁面<head>生成頁面並刷新所有需要的頁眉後刷新緩衝區。這樣任何進一步的輸出都不會被緩衝。唯一需要注意的是,所有標題呼叫都在ob_end_flush呼叫之前完成。

+0

讀爲:_easiest_ not _most efficient_。只要說清楚。仍爲最簡單的選項+1。 –

+0

我試圖找到我可以輸出任何東西之前,這個功能,設置標題,但無法找到任何東西,我也嘗試了ob_start方法,你有建議,但仍然沒有喜悅。我正在使用CURL和GET HTTP方法來運行我試圖設置HTTP標頭的文件。這是否會導致問題? – LeeTee

+0

@LeeTee無論是使用瀏覽器,CURL甚至file_get_contents,腳本的執行都是一樣的。你怎麼知道它不工作?如果錯誤是在頭調用之前已經發送的輸出,則會生成警告,它應該顯示在您的error_log中。那麼它是如何工作的? – danishgoel