1、你已經配置過PHP7的開發環境。
1.1 檢查centos安裝源
yum list installed | grep php
有則刪除舊的:
yum remove php*
1.2 添加新的安裝源
# CentOS 5.Xrpm -Uvh http://mirror.webtatic.com/yum/el5/latest.rpm# CentOs 6.xrpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm# CentOs 7.Xrpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpmrpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
想要刪除上面的安裝包:
rpm -qa | grep webstatic
1.3 安裝PHP開發環境
yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-devel.x86_64
2、下載一份對應版本的PHP原始碼
cd php_src/ext/./ext_skel --extname=hello
進入原始碼的ext目錄,並建立一個hello的外掛程式;extname參數的值就是副檔名稱。執行ext_skel命令後,這樣在目前的目錄下會產生一個與副檔名一樣的目錄。
3、修改config.m4設定檔
cd hellovim config.m4
開啟,config.m4檔案後,你會發現以下內容
dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: dnl PHP_ARG_ENABLE(say, whether to enable say support, dnl Make sure that the comment is aligned: dnl [ --enable-say Enable say support])
其中,dnl 是注釋符號。
上面的代碼說,如果你所編寫的擴充如果依賴其它的擴充或者lib庫,需要去掉PHP_ARG_WITH相關代碼的注釋。
否則,去掉 PHP_ARG_ENABLE 相關程式碼片段的注釋。我們編寫的擴充不需要依賴其他的擴充和lib庫。因此,我們去掉PHP_ARG_ENABLE前面的注釋。
去掉注釋後的代碼如下:
dnl If your extension references something external, use with: dnl PHP_ARG_WITH(say, for say support, dnl Make sure that the comment is aligned: dnl [ --with-say Include say support]) dnl Otherwise use enable: PHP_ARG_ENABLE(say, whether to enable say support, Make sure that the comment is aligned: [ --enable-say Enable say support])
4、修改代碼
修改 hello.c 檔案,實現 hello() 函數;找到 PHP_FUNCTION(confirm_hello_compiled) 在上面添加以下內容:
PHP_FUNCTION(hello){ zend_string *strg; strg = strpprintf(0, "hello word,dingdayu"); RETURN_STR(strg);}
PHP_FUNCTION 為定義PHP內建函式括弧裡面的為函數名,然後再使用下面的修改將函數公開到外掛程式外部。
找到 PHP_FE(confirm_hello_compiled 在上面增加如下代碼:
PHP_FE(hello, NULL)
即修改後效果:
const zend_function_entry hello_functions[] = { PHP_FE(hello, NULL) /* For testing, remove later. */ PHP_FE(confirm_hello_compiled, NULL) /* For testing, remove later. */ PHP_FE_END /* Must be the last line in say_functions[] */ }; /* }}} */
其中上面的代碼中“confirm_hello_compiled”為測試函數,可在實際項目中刪除
5、編譯
phpize./configuremakemake test# 會提醒輸入郵箱make install# 會提示編譯後輸入的目錄 目測:/lib64/php/modules/hello.so
6、添加配置
[hello]extension = hello.so
7、測試效果
你可以使用 “php -m”查看載入擴充,不過這裡請注意,如果php-cli命令和web php的設定檔不是同一個設定檔,則可能會出現差錯,推薦先通過phpinfo();查看web php設定檔,然後使用“php --ini”查看php-cli設定檔。
樓主web的php-fpm是編譯的,php-cli是通過yum安裝的,所以不同。
/etc/php.ini/usr/local/php7/etc/php.ini