元月 25

由於 php 的簡單易用和強大的模組支援,已經成為許多網站的開發語言。在網路內容越來越多元的情況下,程式不像以往只是用來控制網頁內容的輸出,慢慢也擔負起二進位內容的輸出工作。

這個應用主要是方便透過程式來達到更多元的檔案輸出邏輯控管,簡單說就是把關檔案的輸出。
例如圖庫網站,在買家未完成付款前,看到的圖檔全是縮小版且加註浮水印的檔案,而在完成付款手續後,即可變成正式版的原始圖檔。這樣可以方便業者監控所有數位產品的流通狀態,隨時記錄。

然後,因為在輸出檔案前可能加上很多程式邏輯來完成交易流程,這裡就可能會發生一個情況就是額外輸出的內容將造成輸出檔案的錯誤。一般而言,標準的網頁檔案輸出,其標頭應有:

Content-type: 檔案的MIME-TYPE
Content-length:  檔案的容量(位元數)
Cache-Control: private
Content-Transfer-Encoding: binary
Content-Disposition: inline ; filename = 檔案名稱

而後才正式輸出檔案的二進位內容。

會錯誤的地方在於執行輸出前的程式邏輯,如果產生了額外的內容將會寫入 output buffer,而造成實際輸出的容量增大,同時內容也出現錯誤。這個情況通常發生在 debug資訊、例外狀態或函示庫結尾後的多餘空白等情況。因此,在撰寫程式,尤其是函示庫時,要特別小心。因為這些情況往往不會影響到一般的網頁輸出,而不良的設計習慣將造成程式穩定性的一大隱憂。