__halt_compiler的一些总结

php中文网
发布: 2016-08-08 09:22:33
原创
1733人浏览过
  • __halt_compiler(),顾名思义,是让编译器停止编译的函数,当编译器执行到这之后就不再去解析(parsing)后面的部分了。需要注意的是,该函数需要在php文件的最外层直接使用,不能在函数里使用。
根据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()才能使用。
  • 接下来,说一个具体的php安装文件的例子:

在php5.1引入__halt_compiler()之前,使用gzdeflat()压缩的文件因为经常含有不能被php 解释器(parser)读取的特殊ascii码,从而发生错误。为了防止错误的发生就使用base64_encode()来编码gzdeflate()所产生的数据,而这样会造成文件体积增大约33%。这是一种对内存的浪费。

BibiGPT-哔哔终结者
BibiGPT-哔哔终结者

B站视频总结器-一键总结 音视频内容

BibiGPT-哔哔终结者 28
查看详情 BibiGPT-哔哔终结者
$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教程有兴趣的朋友有所帮助。

相关标签:
php
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号