tonyenc(PHP代码加密)在 Windows 下编译64位dll

环境准备

说明:7.2使用VC15编译,本文以PHP7.0.26举例 使用Visual Studio 2017

需要从 官网 下载 PHP7.0.26 的源代码包和已编译的 PHP 程序,再分别解压,得到两个目录(假设在 C 盘):

C:\php-7.0.26-src

C:\php-7.0.26-nts-Win32-VC14-x64

如何编译

1)拿到要编译的代码,在 VS 2017 菜单中选择「文件」-「新建」-「从现有代码创建项目」,然后在弹出窗口中选择你要编译的代码,类型选择「动态库(dll)」。

001.png

2)此时 VS 2017 打开了项目,把工具栏中的「Debug」改为「Release」,「x86」改为「x64」,在菜单中选择「项目」-「属性」。然后在弹出窗口的左侧「常规」栏目下,「配置类型」选择为「动态库(.dll)」:

002.png

3)然后在左侧「C/C++」-「常规」栏目下,「附加包含目录」中,加入:

C:\\php-7.0.26-src
C:\\php-7.0.26-src\\main
C:\\php-7.0.26-src\\TSRM
C:\\php-7.0.26-src\\Zend

003.png

4)接着在左侧「C/C++」-「预处理器」栏目下,「预处理器定义」中,加入:

ZEND_DEBUG=0
PHP_EXTENSION
PHP_WIN32
ZEND_WIN32
HAVE_XXX=1
COMPILE_DL_XXX
ZTS

004.png

注意,要把上面的 XXX 改为大写的扩展名 (如扩展叫 tonyenc 就把 XXX 改成 TONYENC),否则 PHP 将无法识别扩展。ZTS用于告诉编译器开启线程安全(如果去掉就是不开启)。注意,线程安全的开启与否,取决于前面下载到的 C:\php-7.0.26-nts-Win32-VC14-x64,它如果启用了线程安全编译,这里就开启线程安全。

5)在左侧「链接器」-「输入」栏目下,「附加依赖项」中,加入:C:\php-7.0.26-nts-Win32-VC14-x64\dev\php7.lib,即前面下载得到的已编译的 PHP 程序。

005.png

6)点确定,然后菜单中选择「生成」-「生成解决方案」,恭喜你,编译器报错:无法打开包括文件 ../main/config.w32.h,这时把 C:\php-7.0.26-src\win32\build\config.w32.h.in 复制到 C:\php-7.0.26-src\main\config.w32.h (注意没有了后面的 in),然后在 config.w32.h 中加入:

#define PHP_COMPILER_ID "VC14"

这将指明运行库是 VC14,与前面下载到的已编译 PHP 程序匹配,重新生成下解决方案,这样就能成功编译了!

相关文章