2011-06-01 54 views
6

可能重複:
Why do some scripts omit the closing php tag '?>'?的省略關閉PHP標識

我一直在閱讀有關忽略關閉PHP標籤的一些文章,因爲他們說這是在PHP中,如果一個良好的編程習慣你.php文件不包含任何其他內容。有很多這樣的問題,但在我嘗試了他們迄今爲止所做的工作之後,在我的機器上運行良好。也許這是一個固定的問題或什麼?

但我不明白爲什麼它可能是一個良好的編程習慣,因爲它帶來的空間或東西,但我已經試過這一個,而且運作非常良好。

Master.php

<?php 

echo "Master.php"; 

include "Slave.php"; 

header("Location:Slave.php"); 

?> 

Slave.php

<?php 

echo "Slave.php"; 

?> 

我真的不完全得到這個問題應該是什麼,如果我不使用PHP的關閉標記。

謝謝。

+0

它不重複的,因爲我要問更具體的問題用一個例子。 – Tarik 2011-06-01 05:03:27

+1

這首先是一個新人編碼風格的建議。它避免了那個臭名昭着的錯誤。但是,如果你知道自己在做什麼,顯然沒什麼大不了的。 (可能對於分佈式代碼仍然非常明智) – mario 2011-06-01 05:04:05

+0

您正在使用更多的單詞,但您沒有更具體。你在問同樣的問題。 – meagar 2011-06-01 12:37:12

回答

10

主要的問題是你可能包括額外的空格(但它可以是任何字符)收盤?>(除了一個\n其中PHP允許,感謝Mario)之後。

這多餘的空格似乎PHP作爲發送輸出。這使得PHP開始發送響應正文,因此不可能設置/修改任何額外的頭文件。

這很難調試(因爲空白在文本編輯器中通常是不可見的),並且通常導致可怕的頭文件已經發送錯誤。

+0

我試過了,代碼運行得很好,除了這個結果'Slave.php \ n',但它最終還是有效的...' – Tarik 2011-06-01 05:02:44

+1

''>''後面的那個單行換行被PHP吃掉了。這是額外的換行符和回車或其他導致錯誤的空格。 (好,相同的區別..) – mario 2011-06-01 05:06:50

+0

@mario謝謝,糟糕的例子,我會更新:) – alex 2011-06-01 05:09:17

2

與關閉標籤的問題是,在最後的任何空白?>可能造成的錯誤,是很困難的,而錯誤修復檢測。

0

它通常更好不是結束您的腳本與關閉PHP標記。

在你的情況下,在?>之後可能會留下空白(如果由於這個原因導致某些事情中斷,那麼這很狡猾,很難判斷出錯),所以它會被視爲輸出,你將無法啓動會話,例如,如果您正在開發網站,則會傳遞標頭。

只是我的意見。我可能永遠不會結束我的結束標記腳本

0

的問題來自於具有任何數量的線比1打破其他:一些PHP解析器生氣,如果沒有在該端換行,但如果你有一個以上的,因爲php標籤之外的任何東西都被視爲HTML,所以它被打印出

最常見的問題是,一個庫/模型文件將有一個額外的線路中斷,導致頁面/視圖實例化之前長髮送的頭。