我也遇到了這個問題,包括在我的輸出HTML的PHP文件,它是由時產生PHP。在使用純HTML文件再現您的示例時,我沒有任何問題。我能否認爲你的HTML文件是由PHP處理程序處理的?
我不知道您是否仍在尋找解決方案,因爲問題是舊的,但您或其他人可以嘗試我找到的可能解決方案。
解決方案:
添加這些PHP函數你 「ssi_portlet.php」 文件:
ob_flush();
和ob_end_clean();
的開頭和ob_start();
到最後。
我測試了許多其他組合使用PHP的輸出控制功能,php.net,這是唯一一個與各種場景一致的工作。
在你的榜樣 「SSI/ssi_portlet.php」 看起來是這樣的:
<?php
ob_flush(); ob_end_clean();
echo "Content of SSI PHP Script Result";
ob_start();
我測試過使用XAMPP在Windows這個解決方案運行Apache/2.4.12(的Win32)PHP/5.6.8 。
原因:
我的想法,爲什麼會出現這個問題還是有點模糊,所以隨時提供幫助。
PHP在包含文件中生成的輸出似乎會干擾現有的輸出。因爲它們都使用緩衝區來輸出數據。 (有關PHP輸出緩衝的更多信息,請參閱本文末尾)
ob_flush();
將刷新任何現有的輸出,並且ob_end_clean();
將清除緩衝區並關閉。這將確保它不會干擾任何現有的輸出/緩衝區。
ob_start();
是爲了確保包含任何其他SSI的PHP文件都能正常工作,但它們也應該包含與上述相同的解決方案。
這就是說,SSI包括不應該用於包括大量的數據或製作一個動態頁面。由於輸出緩衝是一種提高性能的機制,關閉輸出緩衝並不是最佳解決方案。當然不是在處理大量輸出時。 爲了這些目的,最好使用PHP include()
。
PHP output_buffering:
PHP可以使用一種機制稱爲輸出緩衝,它有一個被稱爲「output_buffering」設置,其可具有3個可能的值。從我的php.ini文件 報價:
; Output buffering is a mechanism for controlling how much output data
; (excluding headers and cookies) PHP should keep internally before pushing that
; data to the client. If your application's output exceeds this setting, PHP
; will send that data in chunks of roughly the size you specify.
; On = Enabled and buffer is unlimited. (Use with caution)
; Off = Disabled
; Integer = Enables the buffer and sets its maximum size in bytes.
output_buffering=4096
你爲什麼首先使用SSI對於這一點,如果你的服務器似乎支持PHP?混合這兩者通常會導致併發症。我建議使用PHP來包含文件。 – CBroe 2014-09-03 09:17:01
我可以詳細解釋,但可悲的是,這無助於解決問題。客戶希望擁有這個功能,並且正在開發環境中工作,但生產服務器看起來像配置不同。 – Kaffee 2014-09-03 10:20:50