本发明涉及一种php源码保护方法,属于php源码保护的技术领域。
背景技术:
php的opcode缓存机制:解释执行php脚本时,会经过五个步骤,参见图1:php解释器从文件系统读取文件、扫描其词典和表达式、解析文件、创建要执行的计算机代码(称为opcode),最后执行opcode。每一次请求php脚本都会执行一遍以上步骤,如果php源代码没有变化,则opcode也不会发生变化。因此,如果将opcode缓存下来,以后直接访问缓存的opcode,可以加快php的执行效率。
启用opcode缓存机制之后的php脚本执行流程图参见图2。opcode缓存机制主要是为了提升php的执行效率而提出的。
共享内存缓存(shmcache)和文件缓存(filecache):根据opcode的储存方式,php的opcode缓存可分为两类:共享内存缓存和文件缓存。
php7之前的opcache只支持共享内存缓存,不支持文件缓存。php7新增了文件缓存功能,在储存共享内存缓存的同时,可将每个php源文件生成的opcode导出为相应的php文件对应的opcode文件,后缀为.bin。
默认情况下内存缓存的优先级高于文件缓存,当发起php脚本请求时,php解释器首先检查内存缓存中是否存在当前所请求的php脚本对应的opcode,若有,则直接执行。若没有,则到指定目录中寻找当前所请求的php脚本对应的opcode文件,若存在相应的opcode文件,则将该文件导入内存中,执行。否则,说明内存缓存和文件缓存中均不存在相应php脚本的opcode,需要重新解析文件。
开启了内存缓存和文件缓存功能的php7执行php脚本的流程见图3。如果文件缓存目录中存在对应php脚本的opcode,php解释器不会重新解释php源文件,因而完全可以删掉原php文件中的内容而不影响php文件的执行。
技术实现要素:
针对以上技术问题,本发明提出了一种php源码保护方法。本发明利用php7文件缓存功能实现php源码保护的方法,该方法简单易行并且可靠性较高。
本发明的技术方案如下:
一种php源码保护方法,包括:利用软件php-7的opcache模块提供的函数opcache_compile_file实现导出opcode文件;当部署到目标服务器时,保留项目中内容被清空的php脚本。由于部署到目标服务器上的是空白的php文件和缓存文件,因此可以起到保护php源码的作用。
根据本发明优选的,所述软件php-7的配置如下:加载fpm模块和opcache模块。所述加载fpm模块:安装时,增加--enable-fpm,并进行相关配置,目的是以php-fpm的模式运行php;所述加载opcache模块:安装时,增--enable-opcache,并进行相关配置,目的是启用opcode缓存功能。
根据本发明优选的,还包括将软件nginx-1配置成:支持php-fpm的方式。
根据本发明优选的,所述软件nginx-1的版本为nginx-1.7.10以上。
本发明的技术优势在于:
本发明所述的一种php源码保护方法,将opcode缓存下来,以后直接访问缓存的opcode,加快php的执行效率,即利用php7文件缓存功能实现php源码保护的方法,该方法简单易行并且可靠性较高。
附图说明
图1是现有技术中,一般的php解释执行示意图;
图2是启用opcode缓存机制之后php解释执行示意图;
图3是同时启用shmcache和filecache的php解释执行示意图;
图4是在本发明所述方法中,php源码保护流程示意图;
图5是目标服务器上执行php文件的流程示意图。
具体实施方式
下面结合实施例和说明书附图对本发明做详细的说明,但不限于此。
实施例、
一种php源码保护方法,包括:利用软件php-7的opcache模块提供的函数opcache_compile_file实现导出opcode文件;当部署到目标服务器时,保留项目中内容被清空的php脚本。由于部署到目标服务器上的是空白的php文件和缓存文件,因此可以起到保护php源码的作用。
所述软件php-7的配置如下:加载fpm模块和opcache模块。所述加载fpm模块:安装时,增加--enable-fpm,并进行相关配置,目的是以php-fpm的模式运行php;所述加载opcache模块:安装时,增--enable-opcache,并进行相关配置,目的是启用opcode缓存功能。
所述php源码保护方法还包括将软件nginx-1配置成:支持php-fpm的方式。所述软件nginx-1的版本为nginx-1.7.10以上。
本发明所述方法的具体源代码如下:
(1)关闭php-fpm
killallphp-fpm
(2)创建opcode缓存目录
mkdir–m777/usr/local/php7/opcache
(3)修改php.ini配置,开启opcache功能
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.file_cache=/usr/local/php7/opcache
(4)创建一个php脚本,该脚本的作用是将指定目录下的所有php文件导出成相应的opcode文件,同时将原php文件中的内容清空。这里指定目录需设置为web服务器根目录。上述例子中为/usr/local/www。
假设上述脚本命名为opcache_compile_file.php
执行脚本:./phpopcache_compile_file.php
(5)设置缓存目录所有者为php-fpm用户
chown–rwww:www/usr/local/php7/opcache
(6)启动php-fpm
/usr/local/php7/sbin/./php-fpm
这时,即使web根目录下的php文件中的内容已经被清空,由于文件缓
存的存在,依然可以访问原php文件对应的页面。
(7)部署到目标服务器
将/usr/local/php7/opcache和/usr/local/www部署到目标服务器,/usr/local/php7/opcache的部署路径需要与目标服务器中php7中设置的文件缓存路径一致,/usr/local/www的部署路径需与目标服务器的web根目录设置一致。