八戒一区二区三区-午夜A级伦理电影-91好吊色国产欧美日韩在线-欧美国产精品二区三区13p-国产操逼大毛片基地-亚洲第一性爱免费视频网

站長資訊網
最全最豐富的資訊網站

讓PHP能夠調用C的函數:FFI擴展(附代碼)

本篇文章給大家介紹一下能夠讓PHP能夠調用C的函數:FFI擴展。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有所幫助。

讓PHP能夠調用C的函數:FFI擴展(附代碼)

讓PHP能夠調用C的函數-FFI擴展

在大型公司中,一般會有很我編程語言的配合。比如說讓 Java 來做微服務層,用 C++ 來進行底層運算,用 PHP 來做中間層,最后使用 JS 展現效果。這些語言間的配合大部分都是通過 RPC 來完成,或者直接將數據入庫再使用不同的語言來取用。那么,我們 PHP 的代碼能否直接調用這些語言呢?其實,PHP 還真為我們準備了一個可以直接調用 C 語言的擴展庫,并且這個擴展庫還是已經默認內置在 PHP 中了,它就是 FFI 擴展。

什么是 FFI

FFI , Foreign Function Interface,外部函數接口。這個擴展允許我們加載一些公共庫(.dll、.so),其實也就是可以調用一些 C 的數據結構及函數。它已經是隨 PHP 源碼發布的一個擴展了,在編譯的時候可以加上 –with-ffi 來直接編譯到 PHP 程序中。

我們這里已經是編譯好的 PHP ,所以我們直接找到這個擴展,進行簡單的擴展安裝步驟就可以安裝完成。

cd php-7.4.4/ext/ffi/ phpize ./configure make && make install

安裝完成后記得在 php.ini 文件中打開擴展。關于這個擴展需要注意的一點是,它有一個配置項為 ffi.enable ,默認情況下這個配置項的值是 "preload" ,僅在 CLI SAPI 環境下啟用 FFI 的能力。當然,我們也可以修改為 "true" 或 "false" 來開啟和關閉它。設定為 "true" 將使得這個擴展在任何環境下都啟用。

使用 FFI 調用 C 的函數

接下來,簡單地看一下它是如何調用 C 的函數的。

// 創建一個 FFI 對象,加載 libc 并且導入 printf 函數 $ffi_printf = FFI::cdef(     "int printf(const char *format, ...);", // C 的定義規則     "libc.so.6"); // 指定 libc 庫 // 調用 C 的 printf 函數 $ffi_printf->printf("Hello %s!n", "world"); // Hello World  // 加載 math 并且導入 pow 函數 $ffi_pow = FFI::cdef(     "double pow(double x, double y);",      "libboost_math_c99.so.1.66.0"); // 這里調用的是 C 的 pow 函數,不是 PHP 自己的 echo $ffi_pow->pow(2,3), PHP_EOL; // 8

我們創建了兩個對象,分別調用了 C 的 printf() 和 pow() 函數。FFI::cdef() 是用于創建一個 FFI 對象,它接收兩個參數,一個是包含常規C語言(類型、結構、函數、變量等)聲明序列的字符串。實際上,這個字符串可以從C頭文件復制粘貼。而另一個參數則是要加載并定義鏈接的共享庫文件的名稱。也就是我們需要的 .dll 或 .so 文件,它與我們聲明字符串是對應的,比如在 libc.so.6 中并沒有 pow() 這類的計算函數,所以我們就要找到 math 相關的 C 語言計算函數庫。

定義變量和數組

當然,FFI 也是可以定義變量和數組的。

// 創建一個 int 變量 $x = FFI::new("int"); var_dump($x->cdata); // int(0)  // 為變量賦值 $x->cdata = 5; var_dump($x->cdata); // int(5)  // 計算變量 $x->cdata += 2; var_dump($x->cdata); // int(7)   // 結合上面的兩個 FFI 對象操作  echo "pow value:", $ffi_pow->pow($x->cdata, 3), PHP_EOL; // pow value:343 $ffi_printf->printf("Int Pow value is : %fn", $ffi_pow->pow($x->cdata, 3)); // Int Pow value is : 343.000000   // 創建一個數組 $a = FFI::new("long[1024]"); // 為數組賦值 for ($i = 0; $i < count($a); $i++) {     $a[$i] = $i; } var_dump($a[25]); // int(25)  $sum = 0; foreach ($a as $n) {     $sum += $n; } var_dump($sum); // int(523776)  var_dump(count($a)); // int(1024) 數組長度 var_dump(FFI::sizeof($a)); // int(8192),內存大小

使用 FFI::new() 函數來創建一個 C 的數據結構,也就是變量聲明,這些變量的內容將保存在 cdata 屬性中。而數組則直接就可以操作這個函數的返回值。當然,當我們要結束使用的時候,還是需要使用 FFI::free() 來釋放變量的,就和 C 語言的開發一樣。

總結

是不是感覺很高大上?但是請注意哦,FFI 調用的 C 函數并沒有 PHP 本身去調用的效率高。比如這種 pow() 函數,使用 PHP 自身的效率更好。而且,FFI 擴展雖說已經是跟隨 PHP 同步發布的擴展,但它還是處于實驗性質的。也就是說,這個擴展是為未來可能用到的其它功能準備的,而且還有很多不確定性。所以在生產環境中如果需要合適類似的功能的話,那么還是要做

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
人妻内射一区二区在线视频| 日本大学SGU大二大三| 欧美VIDEOSDESXO孕交| 欧洲亚洲日韩性无码专区| 日本一线和三线的区别| 我趁老师喝醉后玩弄她的身体| 无码网站天天爽免费看视频| 亚洲AV图片一亚洲AV| 亚洲人成色77777| 英语老师乖乖挽起裙子的意思| 50岁熟妇大白屁股真爽| JEALOUSVUE成熟少归| 人妻无码ΑV中文字幕久久琪琪布 人妻无码ΑV中文字幕久久 | 色综合久久久久无码专区| 无码人妻AⅤ一区二区三区水密桃 无码人妻AⅤ一区二区三区蜜桃 | 高清国语自产拍免费视频| 国产清纯白嫩初高生在线观看| 爆乳2把你榨干哦在线观看| 18禁无遮拦无码国产在线播放 | 熟妇的荡欲乱色欲av浪潮| 性一交一乱一性一在线观看| 艳MU无删减在线观看免费无码| AV免费网站在线观看| 国产V亚洲V天堂无码久久久| 韩国精品久久久久久无码| 美女扒开粉嫩尿口的照片| 日本55丰满熟妇厨房伦| 性妇VODAFONEWIFI精| 无码人妻精品一区二区三| 亚洲日韩AV一区二区三区四区| AAAA级少妇高潮大片在线观看| 中国内地毛片免费高清| 成人无码区免费A∨视频| 国内精品久久久久久中文字幕| 国产精品无码久久久久久| 久久精品久久久久观看99水蜜桃| 黑人又大又粗又硬XXXXX| 年轻夫妻把小孩哄睡后开监控| 丝袜灬啊灬快灬高潮了AV | 成年无码AV片完整版| 好男人好视频资源在线播放| 男女性高爱潮是免费国产| 天堂中文最新版在线中文| 野花视频在线观看最新| 成熟交BGMBGMBGM日本| 精品少妇av无码美人妻| 日本适合18岁以上的护肤品| 亚洲国产成人爱AV在线播放| YY111111少妇无码影院| 姬小满无限奖励别人的英雄| 欧美人与动人物XXXX9296| 小洞饿了想吃大香肠喝热牛奶是| 中文字幕大香视频蕉免费| 国产成人无码精品久久久小说| 久久综合精品国产丝袜长腿| 狠狠躁天天躁男人| 欧洲国产精品无码专区影院| 亚洲AV永久无码精品无码网站| JAPANESEⅩⅩⅩHD高潮| 狠狠爱天天综合色欲网| 人妻妺妺窝人体色WWW仙踪林| 亚洲精品无码专区久久久| 被滋润的娇妻疯狂呻吟| 久久精品国产亚洲AV高清漫画| 日日摸夜夜添夜夜添毛片性色AV| 乌鸦传媒一二三区| 中文字幕亚洲精品无码| 国产一区二区三区精品视频| 青春草无码精品视频在线观看| 亚洲精品无码久久久久久久| 成人无码小视频在线观看| 久久综合给合久久狠狠狠97色6| 天天做天天爱夭大综合网 | 亚洲国产成人精品无码区在线秒播 | 亚洲国产欧美在线成人| 粉嫩av一区二区三区四区| 免费无码AV污污污在线观看| 亚洲AV成人无码久久精品黑人| 宝贝腿开大点我添添公口述视频| 久久久久久A亚洲欧洲AV| 无人区码一码二码三码医生系列| JIJZZIZZ老师出水喷水多| 久久精品人人做人人爽| 午夜亚洲乱码伦小说区69堂| 啊灬啊灬啊灬快灬高潮了电影片段| 久久寂寞少妇成人内射| 午夜在线观看的免费网站| 成人AV鲁丝片一区二区免费| 麻豆产精国品一二三产区区| 亚洲成AV人片在线观看无码| 国产AⅤ爽AV久久久久成人精品| 嫩草在线视频WWW免费看| 亚洲熟妇一区二区| 国产色诱视频在线观看| 深夜成人毛片天堂| 宝宝两根就哭男男是不是太早了| 麻豆国产96在线日韩麻豆| 亚洲欧美一区二区成人片| 国产美女裸体丝袜喷水视频| 日韩乱码人妻无码超清蜜桃丨| 97久久欧美极品少妇XXXXⅩ| 国产ww又大又粗又刺激孕妇| 欧美国产SE综合| 亚洲va熟妇自拍无码区| 凹厕所XXXXBBBB偷拍视频| 国产成人一区二区三区影院| 免费观看四虎精品国产地址| 亚洲桃色AV无码| 日本一区二区三区免费播放| 中文无码AV一区二区三区| 久久se精品一区二区| 亚洲А∨天堂久久精品9966| 国产精品夜间视频香蕉| 国产精品视频一区二区噜噜| 性饥渴少妇XXXXⅩHD| 丰满饥渴老女人HD| 日韩AV无码成人无码免费| japanese国产在线观看| 女人和拘做受全过程| 1区2区3区高清视频| 美丽的熟妇中文字幕| 中文乱码在线中文字幕中文乱码 | 秋霞鲁丝片成人无码| 99久久婷婷国产综合精品| 女BBBB槡BBBB槡BBBB| 97在线视频免费人妻| 免费AV永久免费网址| 日本成AⅤ人片日本伦| XXXXX69HD护士19老师| 欧美人与性囗牲恔配| WWW.好好日.COM| 人体内射精一区二区三区| 草莓视频CAOMEI888| 老师抱着我在教室做| 永久亚洲成A人片777777| 猫咪WWW免费人成人入口| 60老熟女多次高潮露脸视频| 女人扒开屁股桶爽30分钟 | 欧美大屁股XXXX高跟欧美黑人| 999久久久无码国产精品| 欧洲无线一线二线三W955| 宝贝我不想带小雨伞了| 色偷偷888欧美精品久久久| 夫妇交换聚会群4P疯狂大战视频| 四虎影库884AA.WWW| 国产精品亚洲A∨天堂| 亚洲V国产V天堂A无码二区| 久草热8精品视频在线观看| 永久免费无码国产| 欧美性猛交XXXX免费看| 超碰人人澡人人胔| 天天做日日做天天添天天欢公交车| 国产日产欧产精品精品| 亚洲大尺度无码无码专区| 久久久久亚洲AV成人网人人软件| 无码人妻精品一区二区三区久久久| 国产女人乱人伦精品一区二区 | 69女性XXXXⅩ丰满HD| 人人妻人人妻人人人人妻妻人人人人| 俄罗斯IPHONE14PRO| 亚洲ⅤA中文字幕无码毛片| 久久精品国产99精品国产亚洲性| 中文字幕人妻在线中字| 人体色窝窝7777777| 国产免费人成视频在线播放播| 亚洲人成网线在线播放VA| 女人另类牲交ZOZOZO| 丰满日韩放荡少妇无码视频| 亚洲AⅤ天堂无码专区-百度| 久久久无码精品午夜| JEANASIS日本| 香港三级精品三级在线专区 | 国产免费久久久久久无码| 亚洲制服丝袜无码AV在线| 欧美ZC0O人与善交的最新章节| 大明荫蒂女人毛茸茸| 亚洲AV中文无码乱人伦在线视色| 美女无遮挡免费视频网站| 当着老公的面被别人欺负该怎么办 | 人马畜禽CORPORATION| 国产精品乱码一区二区三| 一本加勒比波多野结衣| 久久精品久久久久久噜噜| ACG性奴成熟人妻全彩漫画| 我和公GONG在厨房日本电影| 久久AⅤ无码精品色午麻豆| JEAⅠOUSVUE成熟HD| 亚洲AⅤ中文无码字幕色下载软件 亚洲AⅤ中文无码字幕色本草 | 公交车上穿短裙被狂C| 亚洲女人被黑人巨大进入| 欧美人与禽XOXO牲伦交| 国产免费久久精品国产传媒| 中文无码AV一区二区三区| 色综合久久无码五十路人妻| 精品无码黑人又粗又大又长AV| CHINESE熟女老女人HD视| 亚洲AV成人精品五区| 欧美黑人男士和白人美女a级黄片视频在线播放 | 欧美VIDEOS另类色HDFR| 国产亚洲精品无码不卡|