PHP擴展-擴展的生成和編譯

来源:http://www.cnblogs.com/beatzeus/archive/2016/11/16/6071883.html
-Advertisement-
Play Games

首先說明一下,PHP擴展有兩種編譯方式:方式一:在編譯PHP時直接將擴展編譯進去方式二:擴展被編譯成.so文件,在php.ini里配置載入路徑; 以下開始說明創建PHP擴展並編譯的步驟:下載PHP源碼,並解壓,在源碼的根目錄下開始操作,1. 使用ext_skel生成擴展框架,如下: ➜ php-5. ...


首先說明一下,PHP擴展有兩種編譯方式:
方式一:在編譯PHP時直接將擴展編譯進去
方式二:擴展被編譯成.so文件,在php.ini里配置載入路徑;

以下開始說明創建PHP擴展並編譯的步驟:
下載PHP源碼,並解壓,在源碼的根目錄下開始操作,
1. 使用ext_skel生成擴展框架,如下:

➜ php-5.6.24 cd ~/Downloads/tmp/php-5.6.24
➜ php-5.6.24 cd ext
➜ ext ./ext_skel --extname=myfirstext

 

ext_skel在執行後,會提示開發者後續的操作步驟,這個操作步驟是擴展的兩種編譯方式里的方式一的步驟, 如下:

To use your new extension, you will have to execute the following steps:

1.  $ cd ..
2.  $ vi ext/plogger/config.m4
3.  $ ./buildconf
4.  $ ./configure --[with|enable]-plogger
5.  $ make
6.  $ ./sapi/cli/php -f ext/plogger/plogger.php
7.  $ vi ext/plogger/plogger.c
8.  $ make

2. 修改文件ext/myfirstext/config.m4
重點看line10-18的代碼,用於設置./configure時啟用此擴展的命令選項,將其中line16和line18的dnl刪掉,把dnl理解為註釋符。

14 dnl Otherwise use enable:
15
16 dnl PHP_ARG_ENABLE(myfirstext, whether to enable myfirstext support,
17 dnl Make sure that the comment is aligned:
18 dnl [ --enable-myfirstext Enable myfirstext support])
19
20 if test "$PHP_MYFIRSTEXT" != "no"; then
21 dnl Write more examples of tests here...

以上兩步驟是公共的,以下將分別介紹編譯PHP擴展的兩種方式,
方式一:編譯PHP時直接將擴展編譯進去
3. 在源碼根目錄下執行./buildconf,如下
4. 在源碼根目錄下執行./configure –enable-myfirstext
為了減少編譯時間,可以在configure階段指明不編譯某些模塊,比如:

./configure --without-iconv --enable-debug --enable-myfirstext --disable-cgi --enable-cli --without-pear --disable-xml --without-mysql

5. 在源碼根目錄下執行make
註意編譯成功後,別執行make install了,因為至此,擴展myfirstext已經編譯成功,並且已經生成了相應的php二進位文件了,它在./sapi/cli/php

方式二:擴展被編譯成.so文件,在php.ini里配置載入路徑
3. 在擴展目錄ext/myfirstext/下執行phpize命令
4. 在擴展目錄ext/myfirstext/下執行./configure –enable-myfirstext命令
5. 在擴展目錄ext/myfirstext/下執行make
執行make後會在ext/myfirstext/modules下生成對應的.so文件,在php.ini中配置好載入此文件即可。

校驗擴展是否載入成功
執行./sapi/cli/php -f ext/myfirstext/myfirstext.php
或者通過php -m列出所有擴展,查看是否有myfirstext, 執行命令:./sapi/cli/php -m | grep myfirstext
通過以上校驗,說明擴展編譯成功了。但是到目前為止,還沒有編輯過c相關的代碼,一切都是ext_skel預設生成的,查看這個擴展myfirstext包含哪些函數呢?如下:

➜ php-5.6.24 ./sapi/cli/php -r 'print_r(get_extension_funcs("myfirstext"));'

OK, 目前為止熟悉了PHP擴展框架的生成,配置,和編譯。接下來就要往擴展myfirstext里添加一個自己的函數。

 

qrcode_for_gh_61c6224cfae9_258

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 關於php的curl一系列函數,這裡解釋一下它們的作用。 在html中,我們可以通過form設置http的post和get提交,但假如我們獲取的數據不是從html中來的,而是php腳本主動向其他伺服器提交呢?這個時候,我們應該怎麼實現post和get提交數據呢?答案就是php的curl函數或者str ...
  • ...
  • 今天開始打算每周都寫點東西來記錄自己的學習,自己mark一下。 字典是python中最靈活的內置數據結構,字典是無序的集合(字典的順序隨機是為了快速執行鍵查找),python採用最優化的散列演算法來尋找鍵;字典類似於java中的map,但是沒有java中map那麼多類型(HashMap,TreeMap ...
  • python的類(class)和實例(instance) 假設一種鞋子(shoe)有尺碼(size)和顏色(color)兩種屬性,以此為例。 類可以起到模板的作用,因此,可以在創建實例的時候,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__方法,在創建實例的時候,就把si ...
  • 對於OpenMP,小喵其實並不是瞭解很多,而且小喵本身也只用到了OpenMP的最簡單的功能。在這裡主要是分享一個自己常用的寫簡單的並行程式的思路。希望能幫助到大家。 這個設計模式的主要特點如下: 1,處理的任務是獨立的; 2,可以在運行中輸出結果,而不是最終才輸出; 3,有限的資源占用; 4,在每次... ...
  • 描述 Description 以下的數字倒直角三角形是由二個數確定的:一個數是行數R,1<=R<=39,另一個是種子數S,1<=S<=9。S放在左上角,照著樣例輸出文件的樣子,寫一個程式,根據輸入的二個數列印出相應的數字倒直角三角形。 輸入格式 Input Format 單獨一行,二個用空格隔開的整 ...
  • ...
  • 1. PHP源碼結構 PHP的內核子系統有兩個,ZE(Zend Engine)和PHP Core.ZE負責將PHP腳本解析成機器碼(也成為token符)後,在進程空間執行這些機器碼;ZE還負責記憶體管理,變數作用域管理和對PHP函數的調度管理。 PHP Core負責和SAPI層的通信;PHP Core ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...