概述

PHP 7.2出来有一段时间了,不出意料,memcache又不能用了,于是又想到要自己动手编译,不过与我编译PHP 7.1的memcache的时候相比,有个好消息是已经有人把PHP 7.1和7.2 的memcache都编译好并放在github上了,需要的可直接去那里下载,我这篇文章就不提供下载了:
https://github.com/nono303/PHP7-memcache-dll

注:这里还是要强烈吐槽一下百度,以“php 7.2 memcache”为关键字,完全搜索不到任何有用的东西,上面那个网址我是用google一下子就搜到了,而且还受到启发,顺利的把编译过程给搞定,所以搞开发的遇到技术问题,还是不要在百度上浪费生命了。

我下面还是把我研究出来的PHP 7.2 memcache的编译方法写出来,给有需要的人做个参考吧。

PHP 7.2的memcache编译方法跟之前版本有了一些变化,主要体现在:

  1. PHP SDK的下载路径与编译方式发生了改变;
  2. PHP 7.2的memcache要使用VC15编译;

下载文件

编译前需要下载如下文件:

  1. 编译环境:
    PHP-memcached是用VC15编译的,因为并不常用VC15,所以到微软的官网上下载visual studio 2017 entrpise的试用版即可。
    地址:
    https://www.visualstudio.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F
  2. PHP源代码:
    从PHP官网上下载源代码,地址:
    http://windows.php.net/downloads/releases/php-7.2.0-src.zip
  3. 下载PHP-SDK文件:
    原来的网址里,已经没有PHP 7.2的SDK包下载,根据其页面上的Readme.txt的说明,要到如下地址去下载:
    https://github.com/Microsoft/php-sdk-binary-tools
  4. 下载memcache扩展包的源码,这个地址也换了,如下:
    https://github.com/websupport-sk/pecl-memcache/tree/NON_BLOCKING_IO_php7

准备PHP代码

注意:编译前需先安装好vs2017。

  1. 新建一个编译目录,如PHP72Compile;
  2. 将从https://github.com/Microsoft/php-sdk-binary-tools 下载的包解压到这个目录,目录结构如下:
    PHP - windows下编译PHP 7.2的memcache
  3. 打开cmd窗口,进入到PHP72Compile目录;
  4. 执行phpsdk-vc15-x64.bat,结果如下图:
    PHP - windows下编译PHP 7.2的memcache
  5. 再运行:phpsdk_buildtree phpdev,结果如下图:
    PHP - windows下编译PHP 7.2的memcache
  6. 在此路径下建立php-src目录,并将下载的PHP源码拷贝到这个目录,最终目录结构如下:
    PHP - windows下编译PHP 7.2的memcache
  7. 在命令行进入到php-src目录,结果如下图:
    PHP - windows下编译PHP 7.2的memcache
  8. 执行命令:phpsdk_deps --update --branch master,用来获取SDK的依赖包,输出信息如下:
D:\PHP72Compile\phpdev\vc15\x64\php-src
$ phpsdk_deps --update --branch master

Configuration: master-vc15-x64-staging

Processing package ICU-60.1-1-vc15-x64.zip
Processing package apache-2.4.28-vc15-x64.zip
Processing package c-client-2007f-vc15-x64.zip
Processing package fbclient-3.0-nocrt-x64.zip
Processing package freetype-2.8.0-1-vc15-x64.zip
Processing package glib-2.53.3-vc15-x64.zip
Processing package libargon2-20161029-vc15-x64.zip
Processing package libbzip2-1.0.6-vc15-x64.zip
Processing package libcurl-7.56.0-2-vc15-x64.zip
Processing package libenchant-1.6.0-vc15-x64.zip
Processing package libffi-3.2.1-vc15-x64.zip
Processing package libiconv-1.15-1-vc15-x64.zip
Processing package libintl-0.18.3-1-vc15-x64.zip
Processing package libjpeg-9b-vc15-x64.zip
Processing package liblmdb-0.9.21-vc15-x64.zip
Processing package libpng-1.6.34-vc15-x64.zip
Processing package libpq-9.6.5-vc15-x64.zip
Processing package libqdbm-1.8.78-vc15-x64.zip
Processing package libsasl-2.1.27-vc15-x64.zip
Processing package libssh2-1.8.0-vc15-x64.zip
Processing package libtidy-5.4.0-vc15-x64.zip
Processing package libwebp-0.6.0-vc15-x64.zip
Processing package libxml2-2.9.5-vc15-x64.zip
Processing package libxpm-3.5.12-1-vc15-x64.zip
Processing package libxslt-1.1.30-vc15-x64.zip
Processing package libzip-1.3.0-v15-x64.zip
Processing package mpir-3.0.0-vc15-x64.zip
Processing package net-snmp-5.7.3-vc15-x64.zip
Processing package nghttp2-1.24.0-vc15-x64.zip
Processing package openldap-2.4.45-vc15-x64.zip
Processing package openssl-1.1.0g-vc15-x64.zip
Processing package wineditline-2.202-vc15-x64.zip
Processing package zlib-1.2.11-vc15-x64.zip
Processing package libsodium-1.0.15-vc15-x64.zip
Updates performed successfully.
Old dependencies backed up into 'D:\PHP72Compile\phpdev\vc15\x64\deps.201712260650'.

D:\PHP72Compile\phpdev\vc15\x64\php-src
$

准备PHP memcache代码

  1. 在与php-src同级的目录下建立pecl\memcache目录,并将下载的php-memcache代码放到这个目录下,效果如下图:
    PHP - windows下编译PHP 7.2的memcache
  2. 执行buildconf命令,效果如下图:
    PHP - windows下编译PHP 7.2的memcache
  3. 执行命令:
configure --disable-all --enable-cli --enable-zlib --enable-hash --enable-session --without-gd --with-bz2 --enable-memcache=shared --enable-fd-setsize=2048 --enable-sanitizer

输出信息如下:

D:\PHP72Compile\phpdev\vc15\x64\php-src
$ configure --disable-all --enable-cli --enable-zlib --enable-hash --enable-session --without-gd --with-bz2 --enable-memcache=shared --enable-fd-setsize=2048 --enable-sanitizer
PHP Version: 7.2.0

Saving configure options to config.nice.bat
Checking for cl.exe ...  <in default path>
WARNING: Using unknown MSVC version 19.12.25831

  Detected compiler MSVC 19.12.25831, untested
  Detected 64-bit compiler
Checking for link.exe ...  C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.12.25827\bin\HostX64\x64
Checking for nmake.exe ...  <in default path>
Checking for lib.exe ...  <in default path>
Checking for bison.exe ...  <in default path>
Checking for sed.exe ...  <in default path>
Checking for re2c.exe ...  <in default path>
  Detected re2c version 1.0.2
Checking for zip.exe ...  <in default path>
Checking for lemon.exe ...  <in default path>
Checking for mc.exe ...  C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64
Checking for mt.exe ...  C:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x64
Enabling multi process build

Build dir: D:\PHP72Compile\phpdev\vc15\x64\php-src\x64\Release_TS
PHP Core:  php7ts.dll and php7ts.lib

Checking for wspiapi.h ...  <in default path>
Enabling IPv6 support
Enabling SAPI sapi\cli
Checking for library edit_a.lib;edit.lib ... ..\deps\lib\edit_a.lib
Checking for editline/readline.h ...  D:\PHP72Compile\phpdev\vc15\x64\deps\include
Checking for library libbz2_a.lib;libbz2.lib ... ..\deps\lib\libbz2_a.lib
Checking for bzlib.h ...  D:\PHP72Compile\phpdev\vc15\x64\deps\include
Enabling extension ext\bz2
Enabling extension ext\date
Checking for KeccakHash.h ...  ext/hash/sha3/generic64lc
Enabling extension ext\hash
Enabling extension ext\pcre
Enabling extension ext\reflection
Enabling extension ext\session
Enabling extension ext\spl
Checking for timelib_config.h ...  ext/date/lib
Enabling extension ext\standard
Checking for library zlib_a.lib;zlib.lib ... ..\deps\lib\zlib_a.lib
Checking for zlib.h ...  D:\PHP72Compile\phpdev\vc15\x64\deps\include
Enabling extension ext\zlib
Enabling extension ..\pecl\memcache\php7 [shared]

Creating build dirs...
Generating files...
Generating Makefile
Generating main/internal_functions.c
Generating main/config.w32.h
Generating phpize
Done.

Enabled extensions:
-----------------------
| Extension  | Mode   |
-----------------------
| bz2        | static |
| date       | static |
| hash       | static |
| memcache   | shared |
| pcre       | static |
| reflection | static |
| session    | static |
| spl        | static |
| standard   | static |
| zlib       | static |
-----------------------

Enabled SAPI:
-------------
| Sapi Name |
-------------
| cli       |
-------------

------------------------------------------------
|                 |                            |
------------------------------------------------
| Build type      | Release                    |
| Thread Safety   | Yes                        |
| Compiler        | MSVC 19.12.25831, untested |
| Architecture    | x64                        |
| Optimization    | PGO disabled               |
| Static analyzer | disabled                   |
------------------------------------------------

Type 'nmake' to build PHP

D:\PHP72Compile\phpdev\vc15\x64\php-src
$

编译与查看

  1. 执行nmake开始编译,,等待几分钟或十几分钟,中间会报若干警告,不用理会;
  2. 编译完成后,在“D:\PHP72Compile\phpdev\vc15\x64\php-src\x64\Release_TS\”目录下可找到php_memcache.dll。