多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] # 前言 在extension源码目录,执行phpize命令的时候,从终端的回显上可以看到php api的版本,如果这个显示的版本,和phpinfo()里面显示的版本不一致的话,或者phpize处理php api是个空值的话,我们就可以意识到:最终编译得到so文件,可能是不能使用的。 ![](https://box.kancloud.cn/91370edec69f93544821dccb7ce391aa_390x103.png) ![](https://box.kancloud.cn/66719b82ebe58c90d7324a21a7ee8cd7_466x186.png) # 查看本机的PHPAPI版本 可以通过phpinfo查看,也可以通过命令行查看。相关截图如下: ![](https://box.kancloud.cn/90878c591fa1d9623aff4284e7006dd9_471x78.png) ~~~ php -i|grep -E "PHP API" ~~~ ![](https://box.kancloud.cn/65e210083a78b3ba999fb67eb1379f43_673x91.png) # 确定本机的php相关h文件的位置 如果你执行phpize到时候,显示PHP API为空的话,那么就可以说,你本机相关的库文件缺失。那么江湖流传的方法是:到xcode里面去寻找对应的include/php文件,并将其软链接到系统目录下。但是,这真的是解决方案嘛?事实证明,可能是,也可能不是。 因为你系统使用的php版本,和这个xcode里面的php库文件版本很可能是不一致的。编译得到的so文件是不能使用的。可能会有下面的类似提示信息。 ![](https://box.kancloud.cn/feca762961aca84e805c9fbfb7909e72_707x54.png) 在最新版本的xcode.app目录里面,目录路径如下图所示。要注意路径里面有个带快捷方式的,一个不带快捷方式的。如果以后mac的自带php是7以上版本了,这个方案就可能是正确的了。而目前自带的php是5.6.30(20131106)。而对应的php库文件的版本是20160303。所以,大家看到这里的文字的时候,请根据自己的实际情况来理解。 如果版本一致,那么恭喜你,可以顺利编译。如果不一致,请查看下面的解决方案。 # phpize得到的php api版本号为空 ![](https://box.kancloud.cn/9ccc921d517d390218cf529e14936765_615x171.png) 那么请检查本机的如下路径,是不是存在着相关的php库文件。两个mac里面,一个存在着对应的目录,另外一个不存在。所以,这个可能是和系统版本有关系。 ~~~ cd /usr/include/php/ ~~~ # 修正user/include/php/下的文件(方案一) 如果你确定xcode下的php库文件版本和你自己本机的php版本一致的话,那么可以直接做软连接即可。或者,把对应的文件复制过来。具体的方案,还是因人而异。下面给出一个可能的方案。 ~~~ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.13.sdk/usr/include /usr/include ~~~ 注意上述语句中的『MacOSX10.13.sdk』字样,您的系统可能不适用。如果你查看过对应的xcode.app里面的内容的话,可能会发现,这个目录是个软连接。指向的是没有版本号的那个文件夹,那么您可以直接换成『MacOSX.sdk』即可,或者换成符合您系统内实际情况的那个版本号。 ~~~ ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include /usr/include ~~~ # 修正user/include/php/下的文件(方案二) 如果xcode.app下面的库文件版本号和php版本号不一致,那么您可以选择升级php,或者使用对应的库文件。对应的库文件地址,可以到 http://php.net/downloads.php 上,下载对应源码得到(如果没有你需要的版本,自己换下载链接中的版本号即可)。而在实际应用中,我们还需要用下载得到的源码和xcode.app下面的php目录,进行合并处理,才能得到最终我们所需要的库文件集合。 经验总结上来说,鉴于mac系统下面的『替换』和『合并』的概念,和我们的既往经验差别太大。请大家千万不要使用mac系统的文件夹拖拽来进行『合并』,它和我们在window下面,甚至操作ftp,所得到的经验是完全不一样的。这个合并操作请使用命令行cp来合并。 ~~~ sudo mkdir php cp -r php_xcode/ php/ cp -r php_download/ php/ ~~~ 然后,我们把合并得到的目录,放到/user/include/php下面(也可以使用软连接哦)即可。extension的编译就可以继续进行了。