PHP擴展開發-1

来源:http://www.cnblogs.com/cjblogs/archive/2017/06/24/7074583.html
-Advertisement-
Play Games

開發環境信息 1、基本環境信息如下: [root@localhost lib] cat /etc/os release NAME="CentOS Linux" VERSION="7 (Core)" ID="centos" ID_LIKE="rhel fedora" VERSION_ID="7" PR ...


開發環境信息

1、基本環境信息如下:

[root@localhost lib]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"

2、開發環境最好已經安裝好了PHP,這樣在編譯、測試等環節就不會遇到不必要的麻煩了。
建議在Linux環境下開發PHP擴展,上邊列出來的是我使用的開發環境信息。

PHP版本信息

[root@localhost lib]# php -v
PHP 7.0.17 (cli) (built: Mar 30 2017 07:50:59) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies

Hello World擴展開發

(1)、cd進入PHP源碼目錄下的ext目錄;
(2)、創建擴展程式骨架信息,執行下邊命令就會在當前目錄下創建好一個名為hello的擴展目錄,該目錄下即為這個擴展的骨架代碼;

./ext_skel --extname=hello

(3)、修改hello目錄下的config.m4文件,修改信息如下:

dnl If your extension references something external, use with:

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

dnl Otherwise use enable:

dnl PHP_ARG_ENABLE(hello, whether to enable hello support,
dnl Make sure that the comment is aligned:
dnl [  --enable-hello           Enable hello support])

dnl是註釋符號,這裡把最後三行的註釋去掉就行了。

(4)、修改hello目錄下的hello.c文件,實現hello方法,修改內容如下:
找到PHP_FUNCTION(confirm_hello_compiled),在其上面增加如下代碼:

PHP_FUNCTION(hello)
{
    zend_string *strg;
    strg = strpprintf(0, "hello word");
    RETURN_STR(strg);
}

找到PHP_FE(confirm_hello_compiled, NULL),在其上面增加如下代碼:

PHP_FE(hello, NULL)

編譯安裝

在hello目錄下執行如下命令:

phpize
./configure
make && make install

執行成功後,會在執行信息的最後看到下邊這句話,這句話告知了生成的擴展的存放目錄,cd進去可以看到編譯好的擴展hello.so

Installing shared extensions:     /usr/local/lib/php/extensions/no-debug-non-zts-20151012/

然後去修改php.ini(這個文件通常是在/usr/local/lib目錄下)文件,在擴展信息那邊加上extension = hello.so,保存後執行php -m就可以看到hello這個擴展了

幾個註意點如下
(1)、在執行phpize之前可以先執行whereis phpize確認下phpize的實際位置;
(2)、在執行phpize的時候可能會提示下邊信息:

[root@localhost hello]# /usr/local/bin/phpize
Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

出現這個問題最簡單的解決辦法就是分別安裝下m4和autoconf,安裝命令如下:

yum install m4
yum install autoconf

測試擴展

直接在控制台輸入php -r "echo hello();",看到輸出 hello word 就表示成功啦^_^


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

-Advertisement-
Play Games
更多相關文章
  • Python是一種簡單易學,且功能強大的編程語言。它是面向對象的編程語言。 Python環境安裝配置: Python是一種通用的電腦編程語言,它可以應用於web,Desktop以及game中,在使用Python時最好使用 Python數字 Python字元串 Python列表 Python元組 P ...
  • 公司用的是mysql5.6,該異常是mysql字元集問題,mysql支持的 utf8編碼最大字元長度為 3 位元組,如果遇到表情符這樣的4 位元組的字元就會插入異常。 解決方法: 1.在資料庫層面處理,重新設置資料庫編碼,對資料庫數據進行遷移,對單資料庫應用需停機操作; 2.在程式中進行處理,一般項目都 ...
  • 最近的練手項目使用的是 Maven 在管理項目,在使用 Maven 管理項目時,三層的開發時分模塊開發的,parent-dao-service-web,所有的spring+struts + Hibernate的依賴都是加在 parent 上,dao-service-web都是作為子模塊,在模塊之間的... ...
  • 進程: 1 #!usr/bin/env python 2 #-*-coding:utf-8-*- 3 # Author calmyan 4 import multiprocessing,threading,time 5 6 def run(name): 7 t=threading.Thread(ta ...
  • 一.緣起 剛剛工作兩年,技術還很挫。但是在學習Java的過程中,看到過不少好書,寫下這篇博客不僅是為了推薦,過去學習經歷的一個總結。如果時間能夠重來的話,我將按照以下書單來學習Java。 二.Java基礎篇 1. Head First Java Head First系列又名大頭書系列,這個系列的書都 ...
  • 滑鼠事件監聽機制的三個方面: 1.事件源對象: 事件源對象就是能夠產生動作的對象。在Java語言中所有的容器組件和元素組件都是事件監聽中的事件源對象。Java中根據事件的動作來區分不同的事件源對象,動作發生在哪個組件上,那麼該組件就是事件源對象 2.事件監聽方法: addMouseListener( ...
  • 我們在flask的學習中,會難免遇到多對多表的查詢,今天我也遇到了這個問題。那麼我想了好久。也沒有想到一個解決的辦法,試了幾種方法,可能是思路的限制我放棄了,後來,我就在網上百度,可是發現百度出來的結果和自己想要的還有一定的差距,那麼我根據百度上得來的思路,那麼我也對我的數據結構進行了探索, 下麵來 ...
  • java中的map遍歷有多種方法,從最早的Iterator,到java5支持的foreach,再到java8 Lambda,讓我們一起來看下具體的用法以及各自的優缺點 先初始化一個map keySet values 如果只需要map的key或者value,用map的keySet或values方法無疑 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...