Linux 下編寫一個 PHP 擴展

来源:https://www.cnblogs.com/it-3327/archive/2019/11/21/11908667.html
-Advertisement-
Play Games

假設需求開發一個叫做 helloWord 的擴展。擴展里有一個函數,helloWord()。 echo helloWord('Tom'); //返回:Hello World: Tom 本地環境PHP版本:5.6.9系統:Linux CentOS release 6.5 (Final) 最終效果 實現 ...


    假設需求

開發一個叫做 helloWord 的擴展。

擴展里有一個函數,helloWord()。

 

  echo helloWord('Tom');
    //返回:Hello World: Tom

 


    本地環境

PHP版本:5.6.9

系統:Linux CentOS release 6.5 (Final)

    最終效果



    實現流程

第一步:

    進入到本地的php目錄執行:
     

    cd /root/soft/src/php-5.6.9
    cd ext
    ./ext_skel --extname=helloWord
    cd helloWord
    vi config.m4
     
    搜索:dnl Otherwise use enable 將下麵修改成:
     
    PHP_ARG_ENABLE(helloWorld, whether to enable helloWorld support,
    [  --enable-helloWorld           Enable helloWorld support])
     
    if test "$PHP_HELLOWORLD" != "no"; then
     
    ...

 


如圖:




第二步:

 

  vi php_helloWorld.h
     
    搜索:extern zend_module_entry 新增一行:
     
    PHP_FUNCTION(helloWorld);

 


如圖:



第三步:

 

   vi helloWorld.c
     
    搜索:const zend_function_entry helloWorld_functions[] 新增一行:
     
    PHP_FE(helloWorld, NULL)

 



如圖:



 

   在 helloWorld.c 底部新增一個方法
     
    PHP_FUNCTION(helloWorld)
    {
        char *arg = NULL;
        int arg_len, len;
        char *strg;
        if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
            return;
        }
        len = spprintf(&strg, 0, "Hello World: %s", arg);
        RETURN_STRINGL(strg, len, 0);
    }

 


如圖:



第四步:

 

  //編譯安裝
    cd /root/soft/src/php-5.6.9/ext
    /usr/local/php/bin/phpize #用phpize生成configure配置文件
    ./configure --with-php-config=/usr/local/php/bin/php-config   #配置
    make  #編譯
    make install  #安裝

 



第五步:

 

   //修改php.ini
    extension="helloWorld.so"   #名稱為安裝擴展的名稱

 


第六步:

重啟環境。

完成上面的步驟,簡單的 helloWorld 擴展就OK了。

大家可以根據自己的需求,開發滿足自己的擴展。

比如,可以開發一些擴展類,擴展方法,等等。


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

-Advertisement-
Play Games
更多相關文章
  • 本文介紹,PHP運行在FastCGI模式時,FPM提供的方法:fastcgi_finish_request。在說這個方法之前,我們先瞭解PHP有哪些常用的運行模式? PHP運行模式CGI 通用網關介面 / Common Gateway InterfaceCGI已經是比較老的模式了,這幾年都很少用了。 ...
  • 反射 反射的基本介紹 17.3.1 基本介紹 1) 反射可以在運行時 動態獲取變數的各種信息, 比如變數的類型(type),類別(kind) 2) 如果是結構體變數,還可以獲取到結構體本身的信息(包括結構體的 欄位、 方法) 3) 通過反射,可以修改變數的值,可以調用關聯的方法。 4) 使用反射,需 ...
  • 技術:Java;JSP;Struts2 spring hibernate資料庫: mysqlweb伺服器:tomcat集成開發工具: MyEclipse2014基於SSH的嬰幼兒產品銷售系統主要實現基本的網路購物的功能。本系統結構如下:1,游客訪問 |--系統首頁,查看所有的商品信息和相關的菜單信息 ...
  • 安裝Homebrew 如果已經安裝可以忽略,沒有安裝的請查看小明之前寫好的文章 "mac安裝homebrew" 使用Homebrew安裝Redis (1) 安裝命令 (2) 查看軟體安裝及配置文件位置 Homebrew安裝的軟體會預設在 路徑下; redis的配置文件 存放在 路徑下。 (3) 啟動 ...
  • Mapper映射文件 mapper.xml映射文件主要是用來編寫SQL語句的,以及一些結果集的映射關係的編寫,還有就是緩存的一些配置等等。 在映射文件裡面可以配置以下標簽: | 元素名稱 | 描述 | 備註 | | | | | | select | 查詢語句,最常用、最複雜的元素之一 | 可以自定義 ...
  • 介紹:大三上做一個醫學影像識別的項目,醫生在原圖上用紅筆標記病竈點,通過記錄紅色的坐標位置可以得到病竈點的外接矩形,但是後續會涉及到紅圈內的面積在外接矩形下的占比問題,有些外接矩形內有多個紅色標記,在使用網上的opencv的fillPoly填充效果非常不理想,還有類似python計算任意多邊形方法也 ...
  • 打開 File->Project Structure –> Artifacts(ctrl+alt+shift+s) ,這裡會有4個,我已經刪除了,把 ssm:war 和 ssm:war exploded 移除。然後重新啟動就可以運行了 ...
  • 環境:vmware centos7.4 2cpu 2核心 工具:ab壓力測試工具 測試對象:sso單點登錄系統 電腦:win10 4核 項目環境:flask+uwsgi+nginx(uwsgi 2進程,4線程) 1. 100個用戶,總共100個請求 測試截圖 2. 500個用戶,總共500個請求 測 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...