根據php手冊上的介紹,該函數常用與在腳本內嵌入數據,類似於安裝文件。也就是說在__halt_compiler();後面放一些不需要編譯的如:二進位噪音(clutter)、壓縮檔等各種類型的檔案。如以下程式碼:
// open this file $fp = fopen(__FILE__, 'r'); // seek file pointer to data fseek($fp, __COMPILER_HALT_OFFSET__); // and output it var_dump(stream_get_contents($fp)); // the end of the script execution __halt_compiler(); the installation data (eg. tar, gz, PHP, etc.)
TIP:__COMPILER_HALT_OFFSET__ 常數被用於取得資料位元組的開始處。需要有__halt_compiler()才能使用。
在php5.1引入__halt_compiler()之前,使用gzdeflat()壓縮的檔案因為經常含有不能被php 解釋器(parser )讀取的特殊ASCII碼,從而發生錯誤。為了防止錯誤的發生就使用base64_encode()來編碼gzdeflate()所產生的數據,而這樣會造成檔案體積增加約33%。這是一種對內存的浪費。
$packed = base64_encode(gzdeflate('the old package')); //unpacked $unpacked = base64_decode(gzinflate($packed));而在有了__halt_compiler()之後,我們就可以不再用base64_encode()進行編碼了,而是直接將資料放到__halt_compiler()之後,這樣它就不會被編譯,從而產生錯誤了。// 打开脚本自身文件 $fp = fopen(__FILE__, 'rb'); // 找到数据在文件中的指针 //__COMPILER_HALT_OFFSET__ 将会返回 //__halt_compiler();之后的指针 fseek($fp, __COMPILER_HALT_OFFSET__); // 输出文件 $unpacked = gzinflate(stream_get_contents($fp)); __halt_compiler(); //now here... all the binary gzdeflate already items!!!
以上就介紹了__halt_compiler的一些總結,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。