2011/12/23

PHP Closing Tags


一般寫 PHP 會將系統設定、資料庫連結等功能分開放在多個不同的檔案中。

index.php:
<?php
   require('settings.php');

   // something else

   session_start();
?>

settings.php:
<?php
   // some settings
?>
 

以上程式執行以後會噴錯誤訊息:
session_start(): Cannot send session cache limiter - headers already sent
原因是在 index.php 呼叫 session_start() 之前已經輸出資料,不過到底是哪裡有輸出資料?仔細看才會發現 settings.php 在「?>」後方還換了一行,換行是在 PHP closing tag 之外,所以就被當作一般資料送出。

當程式很龐大時,這種 bug 實在會讓人摔鍵盤、丟滑鼠、凹螢幕。

事實上 PHP 程式不加上結尾的「?>」也是可以執行的,直譯器到檔案結尾會自動當作該程式段落結束,所以程式可以改寫成這樣:

index.php
<?php
   require('settings.php');

   // something else

   session_start();
 


settings.php
<?php
   // some settings
 
 

沒有留言:

張貼留言