2012-04-10 52 views
4

我有奇怪的錯誤,不知道如何解決它,而不浪費太多時間。我在我的控制器的方法應該使用返回XML:php:從空虛的空行

header("Content-type: text/xml"); 
    header("Content-Disposition: attachment; filename=output.xml"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

的事情是,輸出不是因爲空行的有效的XML,我沒有它是從哪裏來的想法,你有一個想法如何解決這個問題?也許忽略這個空行或什麼?我不想調試整個框架...我嘗試使用var_dump(debug_backtrace()),但是我可能因爲教義而得到一個大混亂。

回答

13

幾乎總是會在您的<?php ?>標籤之前或之後出現空行。如果不在你的主文件中,看看你的包含。

此外,一點小技巧...如果您的文件是純PHP,只需從<?php開始,並且永遠不要關閉PHP標記。關閉它是沒有必要的,然後在最後避免空行造成麻煩。

+3

小費排序結束一個未關閉PHP標籤,除非你真的要 – 2012-04-10 20:44:24

+0

@ShaunHare,我想你還說,評論,正如我將它添加到我的答案?或者,我困惑嗎?你什麼意思? – Brad 2012-04-10 20:45:28

+0

沒有必然衝突!意思相同 – 2012-04-10 20:46:32

0

在PHP標籤之前或之後,您幾乎肯定會有空行。解決這個問題的一個方法是在輸出XML文件後總是輸入exitdie()。這將切斷代碼末尾可能有的任何額外行。儘管如此,確保文件一開始沒有任何內容取決於您。

4

此外,任何錯誤消息都將打印到標題前的文檔中。但有時在沒有錯誤的情況下很難找到犯人。試試這個:

ob_start() 

假如把它放在你的腳本第一件事情,這將確保沒有別的輸出,直到調用

ob_flush() 

這可能不是必要的您(使用ob_flush)。

另外,前一段時間我遇到了這個問題,其中包含在另一個腳本中間的腳本在關閉php標記後有一個字符,導致單個字符將標題壓低並使響應無效。

所以我會按照Brad提出的建議,除非必須,否則不要使用關閉php標記。

0

Plesk更新後,我有一個空文件/tmp/.tmp.err這是在php配置中自動加載auto_prepend_file

所以,所有PHP腳本都預先填充了一個空字符串。一些獨特的情況,但可能可以幫助某人。

0

我偶爾遇到這個問題。這可能是非常令人沮喪的。 :-) 無論哪種方式 - 我覺得這很有幫助。這將顯示帶有空行的文件,後跟php開始標記。它會顯示誤報,但有助於縮小搜索範圍。

pcregrep -Mron '\n\<\?php' . 
2

使用ob_clean()它清除緩衝區,有不需要的換行符

+1

你節省了我的一天,這是我的例子(wordpress插件)唯一的解決方案。 – 2017-08-29 11:00:04