一般寫 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