php7没有bin文件,可以在没有源代码的情况下分发PHP7 opcached文件吗?

PHP需要能够打开文件以便调用opcache;如果它不存在,则无法加载…

让我们详细了解look,了解我们可能会玩的技巧:

if (!file_handle->filename || !ZCG(enabled) || !accel_startup_ok) {

/* The Accelerator is disabled, act as if without the Accelerator */

return accelerator_orig_compile_file(file_handle, type);

#ifdef HAVE_OPCACHE_FILE_CACHE

} else if (ZCG(accel_directives).file_cache_only) {

return file_cache_compile_file(file_handle, type);

#endif

} else if ((!ZCG(counted) && !ZCSG(accelerator_enabled)) ||

(ZCSG(restart_in_progress) && accel_restart_is_active())) {

#ifdef HAVE_OPCACHE_FILE_CACHE

if (ZCG(accel_directives).file_cache) {

return file_cache_compile_file(file_handle, type);

}

#endif

return accelerator_orig_compile_file(file_handle, type);

}

我们可以看到,在启用文件缓存的位置,它优先于共享内存缓存.

所以我们遇到的第一个问题是system id不是唯一的,而是由以下元素组成:

> PHP版本

> Zend Extension构建标识符

>二进制标识符,包含以下内容:

> sizeof(char)

> sizeof(int)

> sizeof(长)

> sizeof(size_t)

> sizeof(zend_long)

> ZEND_MM_ALIGNMENT

>如果没有使用PHP的开发版本(未发布,来自git):

> ___DATE__二进制编译日期

> ___TIME___二进制编译时间

PHP版本和构建标识符是必需的,因为至少以下版本或构建版本之间可能会发生变化:

>操作码的整数标识符

>内部结构的布局

> VM期望的指令序列(现有控制结构的细节可能会改变fe.foreach)

> opcache执行的优化(因为以前的可能被发现是不安全的)

二进制标识符是必需的,因为至少zval的布局随着endianess和体系结构而变化:体系结构可能影响一些基本编译器类型(long,size_t等)的大小以及这些类型的上限和下限,而endianess可以影响结构中成员的顺序,以及基本编译器类型的二进制表示.

请注意,相当多的努力用于识别当前系统,这应该让你暂停思考……

禁用时间戳验证opcache.validate_timestamps = 0将允许加载文件高速缓存条目,即使文件系统上的当前文件为空.

标头中包含的校验和仅用于验证文件的脚本部分(位于标头之后),它不包含(也不能)包含系统标识符或校验和本身的标头.

因此,您可以通过更改缓存文件的header中的系统标识符以与目标计算机标识符相对应,欺骗PHP从另一台计算机加载缓存文件.

你应该 ?

也许是为了好玩,但作为一种部署软件的方法,绝对不是.

文件高速缓存不是为此目的,从不同的体系结构和/或构建加载高速缓存将导致PHP崩溃.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值