在咱们研发的项目中,有一部分可能是用于商场用途,会安排在客户供给的设备环境中。由于 PHP 本身是解释型语言,因此未进行处理的代码,就会有泄密或被修改的危害。那样咱们可能会想到最简单有效的办法便是进行加密混淆,而后协同一系列的校验,来守护咱们的代码。那样本篇文案中,咱们就采用了开源的 PHP 加密扩展 screw-plus 进行关联实践分析。
日前市场上有多种加密方法,但基本都是收费的。咱们这次实践采用了开源的方法。screw-plus 是一款开源 php 加密运行扩展,基于 screw 二次研发,暂时只能运行在 linux 下。虽然有些不足,然则倘若加强一下,亦是能够满足有些场景。
在介绍实现之前,咱们先简单介绍下 PHP 扩展的关联知识以及 Hook 机制。
1 PHP 扩展周期
一款扩展的重点生命周期,便是上面的四个宏定义。 MINIT:扩展模块初始化时执行的动作MSHUTDOWN:扩展模块结束时执行的动作RINIT:请求初始化时的动作RSHUTDOWN:请求结束时的动作对应于 zend_module_entry 结构中的四个函数指针:
int (*module_startup_func)(INIT_FUNC_ARGS); /* MINIT() */int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS); /* MSHUTDOWN() */int (*request_startup_func)(INIT_FUNC_ARGS); /* RINIT() */int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); /* RSHUTDOWN() */
咱们在实现一款扩展时,基本都会用到上面四个周期宏定义。完整的 PHP 周期见下图:
本篇文案中咱们只是介绍下跟该扩展关联的信息,倘若想深入认识,能够参考底部链接,自动深入学习。
2 PHP 扩展钩子
在 PHP 内核中,各个执行周期几乎都有供给可重写的钩子,如下表所示。
// AST, Zend/zend_ast.h:void (*zend_ast_process_t)(zend_ast *ast) // Compiler, Zend/zend_compile.h:zend_op_array *(*zend_compile_file)(zend
|