mac系统,phpize命令详解,phpize命令是怎么回事?
发布于 作者:苏南大叔 来源:程序如此灵动~苏南大叔已经陆陆续续讲过很多篇关于php
扩展的事情了,几乎在每篇扩展中,都会提及phpize
这个命令。整体上来说,看起来似乎phpize
这个命令也没有什么作用,仅仅是用于显示PHPAPI
的版本号,实际上,还承担着一部分写配置文件的作用。每个扩展编译的过程中,都会使用到它。
前言
在extension
源码目录,执行phpize
命令的时候,从终端的回显上可以看到phpapi
的版本,如果这个显示的版本,和phpinfo()
里面显示的版本不一致的话,或者phpize
处理api
是个空值的话,我们就可以意识到:最终编译得到so
文件,可能是不能使用的。
查看本机的PHPAPI
版本
可以通过phpinfo
查看,也可以通过命令行查看。相关截图如下:
php -i|grep -E "PHP API"
确定本机的php
相关h
文件的位置
如果你执行phpize
到时候,显示PHPAPI
为空的话,那么就可以说,你本机相关的库文件缺失。那么江湖流传的方法是:到xcode
里面去寻找对应的include/php
文件,并将其软链接到系统目录下。但是,这真的是解决方案嘛?事实证明,可能是,也可能不是。
因为你系统使用的php
版本,和这个xcode
里面的php
库文件版本很可能是不一致的。编译得到的so
文件是不能使用的。可能会有下面的类似提示信息。
在最新版本的xcode.app
目录里面,目录路径如下图所示。要注意路径里面有个带快捷方式的,一个不带快捷方式的。如果以后mac
的自带php
是7
以上版本了,这个方案就可能是正确的了。而目前自带的php
是5.6.30(20131106)
。而对应的php
库文件的版本是20160303
。所以,大家看到这里的文字的时候,请根据自己的实际情况来理解。
如果版本一致,那么恭喜你,可以顺利编译。如果不一致,请查看下面的解决方案。
phpize
得到的api
版本号为空
那么请检查本机的如下路径,是不是存在着相关的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
的编译就可以继续进行了。
写在最后的分析过程
我们可以查看phpize
的源码,我们就可以指定phpize
只是一个壳,具体的php
信息来着/user/include/php/main/php.h
。
下图是个临时对比图。
最后总结
总结一下,苏南大叔写过好多篇php扩展编译安装的事情了,不知道大家都看出来规律了没有。要不,点击这里复习一下?
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。