一、大体流程图

二、PHP 项目文件加密

下表列出了Zend产品中的PHP版本及其内部API版本和Zend产品版本。

如何加密请往后看

三、如何使用

第一步:确认当前环境 Amai Phalcon 前,请确认您具备以下两个条件,如果您的环境不满足此条件,建议您对系统环境进行重新配置。

条件1:PHP版本在5.5.X以上(必须为NTS)

条件2:必须安装ZendGuardLoader

第二步:生成机器码,机器码是授权文件的重要组成部分,每一台服务器都有一个独立的机器码,您只需运行由 我们所提供的机器码生成工具来获取您的机器码即可。

注: 每一台服务器的机器码都是独立的,如果您 是需要将 ECstore 部署在多台服务器上, 您需要生成多个机器码 在windows/linux终端运行hardware.sh,获取机器码如图:

(1)Windows 环境

(2)Linux 环境

第三步:申请授权文件,在邮件中,写入您的机器码与您的公司名称,以邮件形式发送至overcome.wan@gmial.com 进行申请授权文件。邮件标题以“申请ego license授权文件”注明

第四步:获取授权文件及部署

  1. 如果您提供的信息有效,您将会以邮件形式获取到您的license授权文件:“license.zl” 把该文件放入在ecstore安装目录下

  2. 编辑php.ini文件,搜索‘zend_loader.license_path’

  3. 加上zend_loader.license_path=‘Phalcon Web 安装目录/license.zl’

  4. 重启web server

  5. 通过浏览器打开您的网店地址,这就表示您的 license 授权文件安 装成功,可继续进行安装

  6. 完成后记:如果您的研发人员需要在本地进行开发,我们为您提供针对研发人员本地开发的 license文件:“developer.zl”,开人人员无需进行申请,直接部署在自己的电脑上开发即可。

  本地开发license文件位置:Phalcon 目录下developer.zl

 第五步:很遗憾,PHP 的Phalcon框架暂时不支持加密,一下为官方邮件(该邮件为20170512官方回复)

===========Windows 环境测试 ============================

安装要求:

  1、php版本 < 5.6

  2、把加密的php文件上传到服务器上看看效果,提示php文件采用了Zend Guard加密,需要安装Zend Loader/ZendOptimizer

  3、Zend Guard Loader 仅支持NTS

  4、修改php.ini文件

  5、重启服务器

详细步骤:

1、下载Zend Guard Loader (Runtime for PHP 5.5 or 5.6),在这里我选择Windows版本:http://www.zend.com/en/products/loader/downloads#Windows

2、phpStudy 安装,将下载好后解压压缩包zend-loader-php5.6-windows-x86_update1.zip ,找到目录下的 ZendLoader.dll 文件,将它放到你的php目录下ext下,再编辑php.ini文件,添加一段代码(如):

在这里编辑:E:\phpStudy\php\php-5.6.27-nts\php.ini

[Zend.loader]
zend_loader.enable=1
zend_loader.disable_licensing=1
zend_loader.obfuscation_level_support=3
zend_loader.license_path=""
zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

选择一个php5.6 的非安全线程去启动

运行phpinfo(),会看到如下信息:

3、下载ZendGuard-7.0.0-win32.win32.x86.msi,http://www.zend.com/en/products/guard/direct,关于如何加密文件和项目:【PHP】用Zend加密PHP源码/保护你的源代码图文教程

4、测试代码,就以ThinkPhp5.0 的官方代码为案例进行测试

  加密前的代码文件:thinkphp_5_full

  加密后的代码文件:thinkphp_5_full_encode

使用Visual Studio Code 分别打开加密前和加密后的代码项目:thinkphp_5_full

通过浏览器访问页面效果:

thinkphp_5_full_encode

可以看出已被加密成二进制文件了,不能打开,通过浏览器访问则是正常的

注意:把加密后的代码放在项目目录中,如使用了ZendGuard加密的PHP代码的网站,而没有安装Zend Guard Loader,就会出现下图错误(Zend Guard Run-time support missing!):

安装遇到的坑

分析原因:由于我安装的php 版本为TS ,意思就是安全线程,Windows版的PHP从版本5.2.1开始有Thread Safe和NoneThread Safe之分。

【1】Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。

【2】Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。

Thread Safety : enable 是不能安装 ZendLoader.dll 的(Installing Zend Guard Loader for any PHP-NTS distribution)不安线程成才可以的

许可认证为空

修改配置参数:(禁用修改为不禁用),重启服务器即可

zend_loader.disable_licensing=1 修改为:zend_loader.disable_licensing=0

完整配置:

[Zend.loader]
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path="E:\phpStudy\php\php-5.6.27-nts\WWW/tp52.zl"
zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

参考文献:

1、如何对PHP文件进行加密——ZendGuard加密与ZendLoader解密

2、ecstore 授权文件的安装

3、官方文档:http://www.zend.com/en/products/zend-guard

4、官方安装 Zend Guard Loader

5、注册Zend Guard

6、Zend Guard功能

7、图解PHP使用Zend Guard 6.0加密方法教程

======================启用许可认证license======================

需要先生成一个 license.zl,然后把该文件配置到php.ini 文件中

选择正确的PHP 版本,很重要的哦

选择安全,配置license,注意:第四步的 名称和编码的要一样哦(ThinkPHP-Encode-License)

最后生成的加密文件(二进制文件)

复制该文件到项目目录下去

浏览器访问:

说明:以上提示表示没有配置 license路径,于是提示php警告,这时候我们查看配置文件php.ini

[Zend.loader]
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path="E:\phpStudy\WWW/Product_TP5.zl"
zend_extension="E:\phpStudy\php\php-5.6.27-nts\ext\ZendLoader.dll"

也就是以上红色部分文件加载的文件不是方才生成的文件,修改为以下配置(刚才生成的文件),重启服务器

zend_loader.license_path="E:\phpStudy\WWW/ThinkPHP-Encode-License.zl"

刷新刚才访问的网页文件,就可以正常访问了

在这里用的是试用版,有一下问题

1、加密的代码不会优化;

2、加密的文件14天后过期;

3、如果使用license授权,license 3天后过期。

============== Linux 安装测试====================

1、如何安装PHP,查看我的另外一篇博客:http://www.cnblogs.com/tinywan/p/6647587.html/

2、一定要是NTS

3、下面使用连个项目对比测试加密效果

【1】项目名称:thinkphp_5_full  Nginx配置端口号:8080

nginx.conf配置文件:

    # thinkphp_5_full
server {
listen 8080;
server_name 127.0.0.1; set $root_path /home/www/thinkphp_5_full/public;
root $root_path;
index index.php index.html; location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
} location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

通过浏览器访问8080端口,访问正常

【2】项目名称:ThinkPHP-Encode-License 端口号:8088  配置文件:nginx.conf

    # ThinkPHP-Encode-License
server {
listen 8088;
server_name 127.0.0.1; set $root_path /home/www/ThinkPHP-Encode-License/public;
root $root_path;
index index.php index.html; location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
} location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

浏览器访问8088端口,访问已被加密不可以访问

编辑配置文件:vim /etc/php5/fpm/php.ini

[Zend.loader]
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path="/home/www/ThinkPHP-Encode-License.zl"
zend_extension="/home/www/zend-loader-php5.5-linux-x86_64/ZendGuardLoader.so"

phpinfo() 查看是否安装成功

安装成功后还是不能够访问:

Nginx 错误日式

2017/05/23 10:34:59 [error] 5503#0: *9 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Incompatible file format:  The encoded file has format major ID 7,
whereas the Loader expects 6 in /home/www/ThinkPHP-Encode-License/public/index.php on line 0" while reading response header from upstream,

为什么这样子来!PHP加密时候的版本问题吗啊?昨天是5.6 呀,今天在Linux 的是5.5 呀。怎么可以使用昨天的来调试这个来,,,,无语.............. 新建个工程:ThinkPHP-Encode-License-5.5

这时候先切换到windows ,同时改变php 版本为5.5,我们写个test.php 文件进行测试

访问项目还是一个吊样啊!不行啊!大哥

你是加载错误的许可认证吗?一看配置文件,空的呀!原始切换文件就是什么都没有了

扩展都没安装,怎么可鞥?

去官方在下载个5.5 版本的倒腾下

[Zend.loader]
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path="E:\phpStudy\WWW/ThinkPHP-Encode-License-5.5.zl"
zend_extension="E:\phpStudy\php\php-5.5.38\ext\ZendLoader.dll"

google 一番 看到这个表 https://support.zend.com/hc/en-us/articles/217058968

日志报错:

astCGI sent in stderr: "PHP message: PHP Fatal error:  Incompatible file format:  The encoded file has format major ID 7, whereas the Loader expects

看来是这个加密工具版本的为题了:Zend Guard 7 (64-bit) ,仔细琢磨,原来我一直加密使用的PHP版本是php5.6 版本,这个前面已经说过了的,如图所示:

在这里我们在重新加密一次。记得这次一定要选php5.5 版本(linux 安装的php 版本为5.5.9)

最后生成的文件上传到Nginx服务器目录,修改配置文件

(1)vim /usr/local/nginx/conf/nginx.conf

set $root_path /home/www/ThinkPHP-Encode-License-5.5/public;
root $root_path;

(2)vim /etc/php5/fpm/php.ini

[Zend.loader]
zend_extension="/home/www/ZendGuardLoader.so"
zend_extension="/home/www/opcache.so"
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path="/home/www/ThinkPHP-Encode-License-5.5.zl"

重启php5-fpm 和Nginx,打开页面查看,已经OK

在这里为了测试,给一个错误的许可认证文件 ThinkPHP-Encode-License-5.5-error.zl

zend_loader.license_path="/home/www/ThinkPHP-Encode-License-5.5-error.zl"

可以看出Nginx直接报错

错误日志:

[error] 7091#0: *1 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 58.101.3.167, server: 127.0.0.1, 
request: "GET / HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:",

重新配置回原来正确的许可认证,则可以正常访问啦

注: 每一台服务器的机器码都是独立的,如果您 是需要将 ECstore 部署在多台服务器上, 您需要生成多个机器码 在windows/linux终端运行hardware.sh,获取机器码如图:

脚本文件:hardware.sh

#!/usr/bin/env php
<?php
function command_hardware()
{
if(function_exists('zend_loader_enabled') && zend_loader_enabled())
{
foreach (zend_get_id() as $hardware) {
echo $hardware, "\n";
}
} else {
echo 'zend guard loader not installed or not enabled!';
exit;
}
}
command_hardware();

Linux 下面 ,在这里为cli 模式,所以别忘记给cli 模式的配置文件也安装ZendLoader 扩展库,否则报错:zend guard loader not installed or not enabled!

windows 下面

PHP CLI 命令行 运行加密文件可能出现的问题

加密主机号

***************针对Linux 环境 Phalcon框架扩展和Zend Guard Loader 扩展冲突的问题*******

以上测试PHP配置文件是没有安装Phalcon扩展,一点安装Phalcon扩展,启动Nginx则会直接报错

配置 vim /etc/php5/fpm/php.ini 添加一下内容:

[Zend.loader]
zend_extension="/usr/lib/php5/ZendGuardLoader.so"
zend_extension="/usr/lib/php5/20121212/opcache.so"
zend_loader.enable=
zend_loader.disable_licensing=
zend_loader.obfuscation_level_support=

重启 php-fmp 出现一下错误页面信息

Nginx错误日志:"GET /info.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"

注释掉上面/etc/php5/fpm/php.ini 的内容,重启php-fmp 继续测试,可以正常显示

总结:如果安装Phalcon 扩展则在 /etc/php5/fpm/php.ini 添加 zend_extension 扩展则会出现问题

以上都是自己踩的坑啊!

-----------------------正式开始》》》》》》》》》》》》》》》》

我们看看Phalcon扩展文件添加在那里了,原来在这个文件夹下面

root@iZ238xopqw6Z:/home/www# find / -name phalcon.so
/usr/lib/php5//phalcon.so

我们复制 ZendGuardLoader.so 到/usr/lib/php5/20121212 文件夹下面

root@iZ238xopqw6Z:/home/www# cp /usr/lib/php5/ZendGuardLoader.so /usr/lib/php5//ZendGuardLoader.so
root@iZ238xopqw6Z:/home/www# cd /usr/lib/php5//
root@iZ238xopqw6Z:/usr/lib/php5/# ls
curl.so gd.so json.so ldap.so mysqli.so mysql.so opcache.so pdo_mysql.so pdo.so phalcon.so readline.so redis.so ZendGuardLoader.so

当然了这是php5.5.9 和php7不一样了,老规矩,新建文件vim /etc/php5/mods-available/zend-loader.ini 添加以下内容

cd /etc/php5/mods-available

vim zend-loader.ini

[zend.loader]
zend_extension=ZendGuardLoader.so
zend_loader.enable=
zend_loader.disable_licensing=
zend_loader.obfuscation_level_support=
zend_loader.license_path="/home/www/thinkphp_5-encode-5.5.zl"

切换到目录/etc/php5/fpm/conf.d 做一个软连接文件(sudo ln -s 源文件 目标文件)

ln -s ../../mods-available/zend-loader.ini 02-zend-loader.ini

重启php-fmp 继续测试,nginx没有报错

配置文件加载的信息

如何安装ioncube扩展对PHP代码加密

PHP 文件加密Zend Guard Loader 学习和使用(如何安装ioncube扩展对PHP代码加密)的更多相关文章

  1. 如何安装ioncube扩展对PHP代码加密

    禅道专业版本的核心代码都是加密的(前端的html, css, js, 配置,语言项是开源的)的,使用的加密软件是 ioncube,因此要能运行禅道专业版本的软件,先要按照ioncube扩展. 一.下载 ...

  2. CentOS 安装 Zend Guard Loader

    说明:PHP5.3以上的版本不再支持Zend Optimizer,已经被全新的 Zend Guard Loader 取代,下面是安装Zend Guard具体步骤,以下操作均在终端命令行执行 在 Zen ...

  3. CentOS7.0+Zend Guard Loader for PHP 5.6环境搭建

    本文是在centos7.0环境下搭建的, 由于我的php是5.6版本的, 所以需要去下载对应的Zend Guard Loader. 下载地址: http://www.zend.com/en/produ ...

  4. PHP5.3安装Zend Guard Loader代替Zend Optimizer

    Zend Optimizer/3.3.3   解密加代码优化,提高PHP应用程序的执行速度,显著降低服务器的CPU负载. Zend Guard Loader/5.5.0/6.0   解密加代码优化,提 ...

  5. PHP5.3、PHP5.4下安装ZendOptimizer或Zend Guard Loader的方法

    现在很多PHP程序都需要ZendOptimizer环境,但是ZendOptimizer在PHP5.2之后已经被支持,那怎么办,Zend也不会这么做,原来PHP5.3开始ZendOptimizer正式改 ...

  6. apache2.2+php5.3+mysql5.5+Zend Guard Loader集成包

    由前一篇文章 http://www.cnblogs.com/darktime/p/3407980.html 我就配置了一个环境包,免安装的,只需要运行一个.bat的文件文件就算安装成功了 如果你需要用 ...

  7. PHP加速处理插件 Zend Optimizer,Zend Guard Loader 和 Zend Opcache 区别

    PHP 5.3.X   以前版本 为  Zend Optimizer PHP 5.3.X   之后 更名为  Zend Guard Loader 可以帮助php执行加密后的php代码 安装实例以Ubu ...

  8. Linux(centos)如何安装Zend Optimizer Zend Guard Loader

    很多php开源系统都是基于Zend Optimizer的,所以我们需要先安装Zend Optimizer.但在php5.3之后Zend Optimizer被Zend Guard Loader 取代了, ...

  9. php5.4下配置zend guard loader

    前些日子的时候,zend官网下还没有支持PHP5.4的zend guard loader,今天再上去看的时候居然发现了,看来是我好久不关注它的缘故了... zend guard loader 干什么的 ...

随机推荐

  1. node基础-文件系统-文件写操作

    文件操作频率最高的就是读跟写.nodejs的文件的读取API在<node基础-文件系统-读取文件>里已经简单介绍过,本文就简单介绍下nodejs的文件写API. nodejs的文件操作均提 ...

  2. "Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network" 解读

    简介:这是一篇17年的CVPR,作者提出使用现有的人脸识别深度神经网络Resnet101来得到一个具有鲁棒性的人脸模型. 原文链接:https://www.researchgate.net/publi ...

  3. LeetCode-37.解数独

    编写一个程序,通过已填充的空格来解决数独问题. 一个数独的解法需遵循如下规则: 数字 1-9 在每一行只能出现一次. 数字 1-9 在每一列只能出现一次. 数字 1-9 在每一个以粗实线分隔的 3x3 ...

  4. VC++ 屏蔽掉警告

    使用VC6.0在开发程序的时候经常会遇到很多警告,很麻烦,也很耽误时间,可以使用如下方法屏蔽掉警告 在StdAfx.h 中 #define VC_EXTRALEAN 下面增加:#pragma warn ...

  5. Beta博客集合

    Beta博客集合 Task1:beta冲刺准备 冲刺准备 Task2:Beta阶段冲刺合集 Beta阶段冲刺一 Beta阶段冲刺二 Beta阶段冲刺三 Beta阶段冲刺四 Beta阶段冲刺五 Task ...

  6. node之文件的下载

    /** * 文件的下载 */ let express = require('express'); let app = express(); app.get('/',(req,res)=>{ re ...

  7. C语言入门:05.scanf函数

    一.变量的内存分析 1.字节和地址 为了更好地理解变量在内存中的存储细节,先来认识一下内存中的“字节”和“地址”. (1)内存以“字节为单位”

  8. Mysql存储引擎federated

    Mysql数据库存储引擎federated(联盟) 意思就是把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表.->专门针对远程数据库的实现->一般情况下 ...

  9. 使用AutoMapper实现Dto和Model的自由转换(下)

    书接上文.在上一篇文章中我们讨论了使用AutoMapper实现类型间1-1映射的两种方式——Convention和Configuration,知道了如何进行简单的OO Mapping.在这个系列的最后 ...

  10. 伪数组(arguments及字符串)转数组的方法 贼简单

    超简单的伪数组转数组的方法, 简单到令人发指! (这里伪数组使用arguments) 1.使用 Array.prototype.slice Array.prototype.slice.call(arg ...