PHP7建立擴充

來源:互聯網
上載者:User
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
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.