一、大体流程图

二、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. flask_admin 笔记五 内置模板设置

    内建模板 Flask-Admin是使用jinja2模板引擎 1)扩展内建的模板 不要完全覆盖内置的模板,最好是扩展它们. 这将使您更容易升级到新的Flask-Admin版本. 在内部,Flask-Ad ...

  2. LintCode——数字统计

    数字统计:计算数字k在0到n中的出现的次数,k可能是0~9的一个值 样例:例如n=12,k=1,在 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],我们发现1出现 ...

  3. telnet协议:简介与安装使用

    Telnet简介 Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户提供了在本地计算机上完成远程主机工作的能力.在终端使用者的电脑上使用teln ...

  4. C++学习 内存模型和名称空间

    1.单独编译 C++鼓励程序员将组件函数放在独立的文件中,如果只修改了一个文件,则可以只重新编译该文件,然后将它与其他文件的编译版本链接. 一般非常有用的组织程序的策略是把程序分成三部分: 头文件:包 ...

  5. C语言 -- 字符串详解

    字符串是一种非常重要的数据类型,但是C语言不存在显式的字符串类型,C语言中的字符串都以字符串常量的形式出现或存储在字符数组中.同时,C 语言提供了一系列库函数来对操作字符串,这些库函数都包含在头文件 ...

  6. Linux内核分析(第四周)

    扒开系统调用的三层皮(上) 一.用户态.内核态.中断 (上周课件有学习到) 1.地址空间是一个显著的标志(是逻辑地址,不是物理地址) 2.CPU每条指令的读取都是通过cs:eip这两个寄存器:0xc0 ...

  7. Daily Scrum - 11/13

    时间:3:00pm - 3:30pm 今天小组例会主要是任烁分享他对WP源码的code review,通过分析与讨论我们了解了背单词模块的主要类(主要是词和单词本),取词方式(调用数据库接口),算法( ...

  8. ElasticSearch 2 (19) - 语言处理系列之故事开始

    ElasticSearch 2 (19) - 语言处理系列之故事开始 摘要 全文搜索是精度(尽可能少的返回不相关文档)和召回(尽可能多的返回相关文档)的战场.尽管只精确匹配用户查询的词肯定会是精确的, ...

  9. 小程序开发 js里面array操作的方法列表。

  10. poi中如何自定义日期格式

    1. poi的“Quick Guide”中提供了 “How to create date cells ”例子来说明如何创建日期单元格,代码如下: HSSFCellStyle cellStyle = w ...