[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的编译就可以继续进行了。
- OAuth
- 简介
- 步骤
- 单点登录
- .user.ini
- 时间转换为今天昨天前天几天前
- 获取ip接口
- 协程
- 概念
- yield-from && return-values
- 协程与阻塞的思考
- 中间件
- mysqli异步与php的协程
- 代码片段
- pdo 执行的sql语句
- 二进制安全
- 捕捉异常中断
- global
- 利用cookie模拟登陆
- 解析非正常json
- 简单的对称加密算法
- RSA 加密
- 过滤掉emoji表情
- 判断远程图片是否存在
- 一分钟限制请求100次
- 文件处理
- 多文件上传
- 显示所有文件
- 文件下载和上面显示所有文件配合
- 文件的删除,统计,存数组等
- 图片处理
- 简介
- 验证码
- 图片等比缩放
- 批量添加水印
- beanstalkd
- 安装
- 使用
- RabbitMQ
- 简介
- debain安装
- centos安装
- 常用方法
- 入门
- 工作队列
- 订阅,发布
- 路由
- 主题
- 远程调用RPC
- 消息中间件的选型
- .htaccess
- isset、empty、if区别以及0、‘’、null
- php各版本
- php7.2 不向后兼容的改动
- php中的各种坑
- php7改变
- php慢日志
- 邮件
- PHPMailer实现发邮件
- 验证邮件地址真实性
- 文件下载
- FastCgi 与 PHP-fpm 之间的关系
- openssl 加解密
- 反射
- 钩子方法
- 查找插件
- opcode
- opcache使用
- opcache优化
- 分布式一致性hash算法
- 概念
- 哈希算法好坏的四个定义
- php实现
- java实现
- 数组
- jwt
- jwt简介
- 单点登录
- phpize
- GeoIP扩展
- php无法获得https网页内容的解决方案
- homestead运行的脚本
- Unicode和Utf-8转换
- php优化
- kafka
- fpm配置
- configure配置详解