php閉合標籤輸出多餘空行使xml頁顯示錯誤的處理

高洛峰
發布: 2016-11-21 17:17:22
原創
1170 人瀏覽過

在PHP官方文件中,曾經指出最好不要再結尾添加?>結束標記。但我們程式設計的習慣和使用的IDE都會為我
們自動建立php結束標記?>。這個標記使用在正常情況下是不影響程式的運作的。尤其在早期的php4中,這種
標記使用不當也不會影響最後的輸出。但我最近遇到了php腳本結束標記照成頁面無法顯示的問題。
首先wap最終的輸出時xml文件,如果xml文件格式有問題,則無法顯示結果。在多次檢查輸出過程發現並沒有
問題,同樣的程式碼再另一台測試機上顯示也無問題。透過firebug查看,最終的輸出

php閉合標籤輸出多餘空行使xml頁顯示錯誤的處理

php閉合標籤輸出多餘空行使xml頁顯示錯誤的處理

主要原因,透過firebug分析,可以發現在輸出xml之前出現了空行,這個空行照成xml輸出不正常,找遍所有原文件並沒有任何輸出空白行或類似功能語句。使用ob_clean逐行調試,發現在其中一個檔案載入後,輸出出現了空行,最終發現是由於那個php檔案結尾?>後面有兩行空行。將空行去掉, 問題解決輸出正常。
究其原因,在網路上搜尋了相關資料,codeIgniter開發規範給出如下解釋:
PHP閉合標籤「?>」 在PHP中對PHP的分析器是可選的。 但是,如果使用閉合標籤,任何由開發者,用戶,或者FTP應用程式插入閉合標籤後面的空格都有可能會造成多餘的輸出、php錯誤、之後的輸出無法顯示、空 白頁。因此,所有的php檔案應該省略這個php閉合標籤,並插入一段註解來標示這是檔案的底部並定位這個檔案在這個應用的相對路徑。這樣有利於你確定這 個檔案已經結束而不是被刪節的。

 // 错误的写法 INCORRECT
<?php echo "Here&#39;s my code!"; ?>

// 正确的写法 CORRECT:
<?php echo "Here&#39;s my code!";
登入後複製

Demo:

test.php
<?php
header("Content-type:text/xml");
include_once(&#39;sys_common.php&#39;);

echo&#39;<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[测试]]></title>
<link><![CDATA[http://baidu.com]]></link>
<description><![CDATA[测试空行输出]]></description>
<language><![CDATA[zh-CN]]></language>
<pubDate><![CDATA[18.11.2016 14:54:02]]></pubDate>
<lastBuildDate><![CDATA[18.11.2016 14:54:02]]></lastBuildDate>
</channel>
</rss>&#39;;
// exit;
登入後複製

需要引入的系統檔案sys_common.php

<?php

  // do someing
  // 注意:后边这个闭合标签需要去掉,这样上边引入的时候输出xml就不会出错了。
  // ?>
登入後複製

OK,找到引入文件,去掉閉合標籤的就OK!

相關標籤:
php
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!