[TOC]
# 前言
在extension源碼目錄,執行phpize命令的時候,從終端的回顯上可以看到php api的版本,如果這個顯示的版本,和phpinfo()里面顯示的版本不一致的話,或者phpize處理php api是個空值的話,我們就可以意識到:最終編譯得到so文件,可能是不能使用的。


# 查看本機的PHPAPI版本
可以通過phpinfo查看,也可以通過命令行查看。相關截圖如下:

~~~
php -i|grep -E "PHP API"
~~~

# 確定本機的php相關h文件的位置
如果你執行phpize到時候,顯示PHP API為空的話,那么就可以說,你本機相關的庫文件缺失。那么江湖流傳的方法是:到xcode里面去尋找對應的include/php文件,并將其軟鏈接到系統目錄下。但是,這真的是解決方案嘛?事實證明,可能是,也可能不是。
因為你系統使用的php版本,和這個xcode里面的php庫文件版本很可能是不一致的。編譯得到的so文件是不能使用的。可能會有下面的類似提示信息。

在最新版本的xcode.app目錄里面,目錄路徑如下圖所示。要注意路徑里面有個帶快捷方式的,一個不帶快捷方式的。如果以后mac的自帶php是7以上版本了,這個方案就可能是正確的了。而目前自帶的php是5.6.30(20131106)。而對應的php庫文件的版本是20160303。所以,大家看到這里的文字的時候,請根據自己的實際情況來理解。
如果版本一致,那么恭喜你,可以順利編譯。如果不一致,請查看下面的解決方案。
# phpize得到的php 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的編譯就可以繼續進行了。
- 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配置詳解