1. 程式人生 > >PHP擴充套件開發之動態載入so模組與靜態重編譯PHP(上)

PHP擴充套件開發之動態載入so模組與靜態重編譯PHP(上)

動態載入so模組:利用ext_skel工具編譯生成so模組,修改php.ini檔案,動態載入即可
靜態編譯:將編寫的模組靜態編譯到PHP,需要重新編譯PHP

假設要編寫一個my_dynamic擴充套件,呼叫my_dynamic函式後輸出字串“The Best or Nothing”

<?php
echo  my_dynamic();
?>

輸出:

$ php . /test .php
$ The Best or Nothing

環境約定:
a.為了方便,安裝過程均使用root使用者;
b.PHP安裝目錄:/usr/local/php7
c.PHP原始碼:/usr/local/src/php-7.0.9

  1. 利用ext_skel工具生成基本程式碼
[root@bogon xuj]# cd /usr/local/src/php-7.0.9/ext/
[root@bogon ext]# ./ext_skel --extname=my_dynamic

這裡會在/usr/local/src/php-7.0.9/ext/目錄下生成my_dynamic擴充套件的目錄,
這裡寫圖片描述
同時也可以看到ext_skel提示的編譯流程,這裡也可以參考laruence前輩給出的PHP extension步驟
ext_skel:
這裡寫圖片描述
laruence:
這裡寫圖片描述
2.修改config.m4

[root@bogon ext]# cd my_dynamic/
[root@bogon my_dynamic]# vi config.m4

去掉dnl

dnl PHP_ARG_WITH(my_dynamic, for my_dynamic support,
dnl Make sure that the comment is aligned:
dnl [  --with-my_dynamic             Include my_dynamic support])

去掉dnl後:

 PHP_ARG_WITH(my_dynamic, for my_dynamic support,
dnl Make sure that the comment is
aligned: [ --with-my_dynamic Include my_dynamic support])

3.編寫my_dynamic函式

[[email protected] my_dynamic]# vi my_dynamic.c
插入:
PHP_FUNCTION(my_dynamic)
{
    php_printf("The Best or Nothing\n");
    RETURN_TRUE;
}

在const zend_function_entry my_dynamic_functions 插入 PHP_FE(my_dynamic,NULL)

這裡寫圖片描述

4.編譯安裝擴充套件

[root@bogon my_dynamic]# /usr/local/php7/bin/phpize 
[root@bogon my_dynamic]# ./configure --with-php-config=/usr/local/php7/bin/php-config 根據自己環境寫php-config路徑
[root@bogon my_dynamic]#  make  &&  make  install

這裡寫圖片描述

成功生成擴充套件 在目錄:/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
這裡寫圖片描述
可以去no-debug-non-zts-20151012目錄檢視
這裡寫圖片描述
5. 修改php.ini檔案

加入

[my_dynamic]
;just test 20161020
extension=my_dynamic.so

這裡寫圖片描述
儲存後,檢視是否新增擴充套件成功

[root@bogon no-debug-non-zts-20151012]# /usr/local/src/php-7.0.9/sapi/cli/php -m|grep my

這裡寫圖片描述

6.測試
編寫測試檔案test.php

 [[email protected] my_dynamic]#vi test.php
    <?php
    echo  my_dynamic();
    ?>

測試

[root@bogon my_dynamic]# /usr/local/src/php-7.0.9/sapi/cli/php test.php

這裡寫圖片描述
可以看到PHP能正常呼叫my_dynamic擴充套件,輸出期望的The Best or Nothing

相關推薦

PHP擴充套件開發動態載入so模組靜態編譯PHP

動態載入so模組:利用ext_skel工具編譯生成so模組,修改php.ini檔案,動態載入即可 靜態編譯:將編寫的模組靜態編譯到PHP,需要重新編譯PHP 假設要編寫一個my_dynamic擴充套件,呼叫my_dynamic函式後輸出字串“The Best

Windows下php擴充套件開發c++動態

PHP擴充套件開發,從零瞭解到初步完成一個小專案,經過三天的仔細研究,現整理如下 一、需求介紹 PHP擴充套件開發,呼叫自己之前的c++動態庫,完成功能 二、專案之前 系統:windows xp  開發工具:vs 2008 web環境:apache2.4  PHP5.3.2

Winphone開發動態載入XAML

XAML是可以動態載入的,這裡所說的動態載入就是說寫好了一個靜態XAML,然後在執行時用C#載入到相應的地方去。 動態載入XAML注意的幾點: 1)待載入的XAML只能有一個根節點,也就是說不能有多個

PHP 擴充套件開發Zephir

最近對程式碼進行效能分析後,發現兩個耗時的地方:自動載入檔案數太多;引數驗證函式呼叫超過1000次。這也是許多php語言框架面臨的問題,所以發展出來諸如Yaf,Swoole,Phalcon這些C語言擴充套件框架,或者類似workerman,reactphp,phpdaemon這些一次載入的框架。總之減少載入檔

一次失敗的PHP擴充套件開發

2. 進入php原始碼包的ext目錄,藉助ext_skel工具生成外掛架子程式碼 cd ext ./ext_skel --extname=demo 3. 編輯config.m4,開啟PHP_ARG_WITH或者PHP_ARG_ENABLE選項(說實話區別仍沒搞清楚,求達人指點),新增C++支援、依賴路徑

微信小程式開發手記七:一個小程式上線後的總結

終於,經過大概一週時間,磕磕絆絆地提交稽核了,一個移動猿開發小程式,也算有了些心得,也遇到了些坑,這裡和大家一起分享下。 怎麼樣調佈局 先說一個題外話,最後引入正題。 如果翻看過一些資料,大家肯定很容易會發現一件事,那就是關於image標籤的預設寬高,

js的動態載入、快取、更新以及複用

總體思路 1、  建立一個js服務,該服務實現通用js檔案的載入、依賴、快取、更新以及複用。 2、  各個專案如果使用通用js,可(bi)以(xu)使用js服務實現載入。 3、  Js服務只提供通用的js,比如jQuery、my97、easyUI等(可根據實際情況設定具體的js檔案)。 4、  其他針

js的動態載入、快取、更新以及複用

  本來想一氣呵成,把載入的過程都寫了,但是卡著呢,所以只好在分成兩份了。   1、頁面裡使用<script>來載入 boot.js 。   2、然後在boot.js裡面動態載入 bootLoad.js。以時間作為標識 var dateVer = date.getYear() + '_

js的動態載入、快取、更新以及複用

使用範圍:   OA、MIS、ERP等資訊管理類的專案,暫時不考慮網站。 遇到的問題:   完成一個專案,往往需要引用很多js檔案,比如jQuery.js、easyUI等。還有自己寫的一些列js檔案,那麼這些檔案如何方便的載入,如果檔案有變化如何才能讓客戶端及時更新快取?如果能夠提高點執行效率,

js的動態載入、快取、更新以及複用

  上一篇發出來後得到了很多回復,在此首先感謝大家的熱情捧場!有的推薦第三方框架,比如 In.js、requrieJS、sea.js、lab.js等。這個開闊了眼界,以前只知道sea.js,省去了自己搜尋的麻煩。也用了點時間簡單看了一下,因為每一個都是大塊頭,都有自己的理念,如果只是簡單使用的話,那麼誰便

百度地圖的簡單開發實現基本地圖的型別及覆蓋物的新增

今天,我們接著上一講,上一講我們把地圖上介面自定義了一番,加上了按鈕等一系列的控制元件,但是還沒有給這些加上具體的功能,今天這一講,主要是實現幾種地圖的切換,是否開啟實時交通,通過自定義的按鈕去控制地圖的縮放,以及在地圖上新增覆蓋物及相關顯示覆蓋物的資訊。   

Android-動態載入外掛化的兩種實現方式:介面

上一篇部落格中http://blog.csdn.net/lxping51/article/details/71480239,主要通過反射的方式來實現動態載入外掛化,今天我們以介面的方式來達到目的。介面的實現比反射更為簡單,而且直接呼叫對效能有很大的提高。但是這也

Android開發實現滑動RecyclerView,浮動按鈕的顯示和隱藏

本篇部落格,主要講解了滑動RecyclerView實現FloatingActionButton的顯示和隱藏的動畫。 -------------------------------分割線----------------------------- 效果圖展示: -------

iOS開發CGPoint、CGSize、CGRect、CGRectMake、window視窗、檢視view

一)三個結構體:CGPoint、CGSize、CGRect 1.  CGPoint /* Points. */   struct CGPoint {     CGFloat x;     CGFloat y;   };   typedef struct CGPoi

UVM暫存器篇六:暫存器模型的常規方法

本文轉自:http://www.eetop.cn/blog/html/28/1561828-6266223.html mirrored、desired和actual value 在我們應用暫存器模型的時候,除了利用它的暫存器檔案資訊,也會利用它來跟蹤暫存器的值。跟蹤暫存器的值,一方面是建立m

從壹開始微服務 [ DDD ] 九 ║從軍事故事中,明白領域命令驗證

烽煙 哈嘍大家週二好呀,咱們又見面了,上週末掐指一算,距離 聖誕節 只有 5 周的時間了(如果你還不知道為啥我要提聖誕節這個時間點,可以看看我的第二系列開篇《之一 ║ D3模式設計初探 與 我的計劃書》),然後我簡單的思考了下這個DDD領域驅動設計還剩下的知識點,現在已經進入了第二部分,就是領域命令和領域驅

深度學習筆記——理論推導概念,成本函式梯度下降演算法初識

前情提要 一、神經網路介紹 概念:Learning ≈ Looking for a Function 框架(Framework): What is Deep Learning? 深度學習其實就是一個定義方法、判斷方法優劣、挑選最佳的方法的過程:

億級流量系統架構如何保證百億流量下的資料一致性【石杉的架構筆記】

歡迎關注個人公眾號:石杉的架構筆記(ID:shishan100) 週一至週五早8點半!精品技術文章準時送上! 目錄 一、前情提示 二、什麼是資料一致性? 三、一個數據計算鏈路的梳理 四、資料計算鏈路的bug 五、電商庫存資料的不一致問題 六、大型系統的資料不一致排查有多困難 七、下篇預告 一、前情提示

iOS webView的高階用法JS互動,jsoc的相互呼叫JavaScriptCore

重要的事情放前面 github地址:https://github.com/horisea/JSCallOCTest   歡迎star 前言:說起JS互動,很多童鞋會黯然色變,感覺很高深的樣子。大部分小夥伴只知道一種,哪一種我也說說吧。    1.在webView中將要

晶片驗證全視九:一名驗證師的自我修養

首先宣告一下,如果這一篇文章能夠讓你停下來5分鐘思考你哪方面還有值得提高的地方,那麼這篇文章對你來講就是值得的。 我們在這些年都能夠看到設計複雜性的不斷增長,而讓我們有能力去完成設計驗證的也正是一群緊密合作的設計師和驗證師。針對日漸複雜的設計,我們會通過不同的方