PHP FFI 一種全新的PHP擴充套件方式

2021-10-06 17:55:33 字數 606 閱讀 1443

隨著php7.4而來的有乙個我認為非常有用的乙個擴充套件,php ffi(外部功能介面),引用一段php ffi rfc中的一段描述:

對於php,ffi提供了一種在純php中編寫php擴充套件和對c庫的繫結的方法。

是的,ffi提供了高階語言直接的互相呼叫,而對於php而言,ffi讓我們可以方便的呼叫c語言寫的各種庫。

其實現有大量的php擴充套件是對一些已有的c庫的包裝,某些常用的mysqli,curl,gettext等,pecl中也有大量的類似擴充套件。

傳統的方式,當我們需要用一些已有的c語言的庫的能力的時候,我們需要用c語言寫包裝器,把他們包裝成擴充套件,這個過程中就需要大家去學習php的擴充套件怎麼寫,當然現在也有一些方便的方式,某種zephir。但總還是有一些學習成本的,而有了ffi之後,我們就可以直接在php指令碼中呼叫c語言寫的庫中的函式了。

而c語言幾十年的歷史中,積累積累的優秀的庫,ffi直接讓我們可以方便的享受這個龐大的資源了。

言歸正傳,今天我用乙個例子來介紹,我們如何使用php來呼叫libcurl,來抓取乙個網頁的內容,為什麼要用libcurl呢?php不是已經curl擴充套件了麼?嗯,首先因為libcurl的api我比較熟,其次呢,正是因為有了,才好對比,傳統擴充套件方式和ffi方式直接的易用性不是?

一種全新方法

n1 是 sun 正在開發的一種系統體系架構,其目的在於降低 it 技術的複雜性。2002 年 9 月 19 日 當今的 it 組織正面臨著嚴峻的挑戰。網路計算的發展帶來的是更大的可伸縮性和靈活性,從而使計算環境變得越來越複雜且越來越難以管理。同時,商業服務在更高速度和更低成本方面對 it 的要求也...

一種全新的鍊錶模式

一般使用如下所示的方式定義節點 typedef struct tnode tnode 在進行節點的初始化的時候,需要將定義頭節點,如下所示 tnode phead 然後開始進行鍊錶的生成,具體的如下所示 程式執行的主要關係是,先給首節點變數賦值,將節點指標指向null,再建立乙個臨時節點p,並為p....

PHP學習的一種習慣

php學習的一種習慣 習慣是一種常態,一種下意識,一種自動自發,一種經過長期培養而形成的自然而然的狀態,就像 php程式 早已安裝於大腦和肌肉中,成為一種特殊的記憶,是在長時間裡逐漸養成的一種行為。學習習慣的養成,是乙個漫長的過程,它只有起點沒有終點。學習習慣的養成,是一種追求,是一種動力,一種對知...