PHP擴充開發之基於函數方式使用lib庫的方法詳解

來源:互聯網
上載者:User
這篇文章主要介紹了PHP7擴充開發之基於函數方式使用lib庫的方法,結合執行個體形式分析了PHP7中lib庫擴充的封裝與調用相關操作技巧,需要的朋友可以參考下

本文執行個體講述了PHP7擴充開發之基於函數方式使用lib庫的方法。分享給大家供大家參考,具體如下:

前言

首先說下什麼是lib庫。lib庫就是一個提供特定功能的一個檔案。可以把它看成是PHP的一個檔案,這個檔案提供一些函數方法。只是這個lib庫是用c或者c++寫的。

使用lib庫的情境。一些軟體已經提供了lib庫,我們就沒必要再重複實現一次。如,原先的mysql擴充,就是使用mysql官方的lib庫進行的封裝。

在本文,我們將建立一個簡單的lib庫,並在擴充中進行封裝調用。

代碼

基礎代碼

這個擴充,我們將在say擴充上增加call_lib_fun()。say擴充相關代碼大家請看這篇博文。PHP7擴充開發之hello word 文中已經詳細介紹了如何建立一個擴充和提供了源碼下載。

代碼實現

建立lib庫

增加hello.h檔案。代碼如下:

#ifndef TEST_HEADER_FILE#define TEST_HEADER_FILE#include <stdlib.h>#include <string.h>char * show_site(); #endif

增加hello.c檔案。代碼如下:

#include "hello.h"char * show_site(){  char *site = malloc(15 * sizeof(char));  strcpy(site, "www.bo56.com");  return site;}

然後使用以下命令產生lib庫(動態庫)檔案:

$ gcc -g -O0 -fPIC -shared -o hello.so ./hello.c

這樣在目前的目錄下就會產生一個hello.so的動態庫檔案。不同作業系統動態庫的副檔名可能不一樣。如 windows下是dll,mac下是 dylib,linux下是so。

然後把hello.so拷貝到/usr/local/lib/目錄下,命名為hello.so
把hello.h拷貝到/usr/local/include/目錄下。

修改config.m4檔案

增加擴充對動態庫的依賴。主要增加以下幾行代碼:

PHP_ADD_LIBRARY_WITH_PATH(hello, /usr/local/lib/, SAY_SHARED_LIBADD)PHP_SUBST(SAY_SHARED_LIBADD)

編寫擴充代碼

增加hello.h的引用。

#include "php_say.h"#include <stdio.h>//下面這行是增加的#include "hello.h"

增加show_site()方法。代碼如下:

PHP_FUNCTION(show_site){  char *site = show_site();  RETVAL_STRING(site);  free(site);  return;}

php調用結果

<?php$result = show_site();var_dump($result);?>

執行結果

$php ./test.phpstring(12) "www.bo56.com"

代碼解讀

PHP_ADD_LIBRARY_WITH_PATH 是用於指定lib庫的名字,地址等資訊。第一個參數是名字,第二個參數是地址。

在say.c檔案中增加lib庫的標頭檔。使用#include "hello.h"

在擴充代碼中就像調用其他核心提供的方法一樣,去調用lib庫中的方法。

您可能感興趣的文章:

thinkphp 中的volist標籤在ajax操作中的特殊性

詳解thinkphp中的volist標籤的講解

PHP實現找出鏈表中環的入口節點的相關知識講解

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.