# php7ext-sample **Repository Path**: yunlong/php7ext-sample ## Basic Information - **Project Name**: php7ext-sample - **Description**: 使用 VS2015 为 PHP7.0 开发扩展的示例。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2016-05-05 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PHP 7.0 扩展示例 这是一个用 Visual Studio 2015 开发 PHP 7.0 扩展的示例项目。 ## 依赖 - Microsoft Visual Studio 2015 社区版 - PHP 7.0 RC6 Win32 二进制包 - PHP 7.0 RC6 源代码 ## 编译步骤 > 假设 PRJROOT 是一个编译用的目录,使用绝对路径。 1. 解压 PHP7 二进制包到 `PRJROOT\php7bin`。 2. 解压 PHP7 源代码到 `PRJROOT\php7src`。 3. 将本项目代码放到 `PRJROOT\php7ext-sample`。 4. 使用 VS2015 打开 `PRJROOT\php7ext-sample\php7ext-sample.sln`。 5. 选择对应的32位或64位环境进行编译,注意 DEBUG/RELEASE。 6. 编译完成,复制 bin 目录下的 `php7ext-sample.dll` 到 `PRJROOT\php7\ext`, 并在 php.ini 里开启扩展。 7. 将 sample.php 复制到网站目录下,用浏览器打开。 ## 如何创建一个新的 PHP 7.0 扩展呢? > 您应该先安装一个 bash-shell,比如 `msys`。 1. 将 PHP7 二进制目录添加到 PATH 环境变量。 ``` export PATH=$PATH:/PHPROOT/ ``` 2. 根据函数的功能需要,编写 `ABC.def`,用于产生扩展框架,例如。 ``` string func1(int, string) int func2(float) ``` 3. 执行 `ext_skel_win32.php`,创建扩展原型,NAME是扩展名称。 ``` php.exe /PHPSRCROOT/ext/ext_skel_win32.php --extname=NAME --proto=./ABC.def ``` 4. 启动 VS2015,选择菜单,根据现有代码创建VC++项目。 5. 修改项目属性,将下列目录添加到 `VC++目录` 的 `引用目录` 中: `/PHPSRCROOT/TSRM`, `/PHPSRCROOT/main`, `/PHPSRCROOT/Zend`, `/PHPSRCROOT/win32`. 6. 注册 C/C++ 预处理器常量: ``` ZEND_DEBUG=0 PHP_EXTENSION PHP_WIN32 ZEND_WIN32 HAVE_NAME=1 // NAME should be replaced by ur extension name. COMPILE_DL_NAME // refer to above ZTS // Remove this if NTS ``` 7. 将 `/PHPROOT/dev/PHP7.lib` 添加到链接器的链接项目中。 8. 复制 `/PHPSRCROOT/win32/build/config.w32.h.in` 为 `/PHPSRCROOT/main/config.w32.h`. ``` // (仅限Windows)在文件第一行加入下列内容,否则扩展无法加载。 #define PHP_COMPILER_ID "VC14" // VS2015 ``` 9. 好了,现在完善扩展代码,编译并开启即可使用。 > 注意事项: > 如果您是为 PHP 7.0 编译 Windows x64 版本扩展,请注意项目属性里 x64 页的项目类型, 其默认为 `应用程序(Application)`。