Linux下php動態新增擴充套件

2022-04-12 15:34:55 字數 2537 閱讀 9826

假定手動配置好php環境情況下.................

一.生成需要呼叫的so檔案

//要呼叫的演算法

int rgb_to_gray(int r, int g,int

b)

$ gcc -o -c -fpic -o gray.o gray.c                    // -fpic:是指生成的動態庫與位置無關

$ gcc -shared -o libgray.so gray.o                  // -shared:是指明生成動態鏈結庫   libgray.so 指明後面呼叫庫時要呼叫lgray

# cp libgray.so /usr/local/lib               // 把生成的鏈結庫放到指定的位址

# echo /usr/local/lib > /etc/ld.so.conf.d/local.conf     //  把庫位址寫入到配置檔案中

# /sbin/ldconfig             // 用此命令,使剛才寫的配置檔案生效

寫段程式驗證其正確性:

#include

intmain()

編譯並執行:

$ gcc -o test -lgray test.c                // 編譯測試檔案,生成測試程式

$ ./test          // 執行測試程式

二.製作php模組 (外部模組)

為了方便操作設定一些環境變數,當然也可以不用。

php原始碼解壓位址為$php-5.3.23

php安裝位址為$php

apache安裝位址為$apache2

1、建立名字為gray的專案,最終會生成gray.so

cd $php-5.3.23/ext/

./ext_skel --extname=gray

2、 首先編輯生成的gray資料夾內的 config.m4 檔案,去掉第16行~第18行的注釋(注釋符號為 dnl 。)

$ gedit gray/config.m4

修改成php_arg_enable(gray, whether to enable gray support,

make sure that the comment is aligned:

[ --enable-gray enable gray support]) 

3. 開啟 php_gray.h,$ gedit gray/php_gray.h 

將php_function(confirm_gray_compiled); /* for testing, remove later. */

更改為php_function(gray);

開啟gray.c $ gedit gray/gray.c

將zend_function_entry php5cpp_functions = /* must be the last line in php5cpp_functions */

};更改為

zend_function_entry php5cpp_functions = /* must be the last line in php5cpp_functions */

};在檔案最後新增:

php_function(gray)

result=rgb_to_gray(r,g,b);

return_long(result);

}

4. 然後執行 phpize 程式,生成configure指令碼:

$ cd $php-5.3.23/ext/gray

$ $php/bin/phpize

ps: 如果出現:cannot find autoconf.……的錯誤資訊,則需要安裝 autoconf (安裝過程略)

$ ./configure --with-php-config=$php/bin/php-config

$ make ldflags=-lgray  //呼叫一開始放入配置的動態鏈結庫

$ make install             //這時會編譯出 gray/modules/gray.so 

5.配置php.ini                    //該檔案所在目錄可通過在瀏覽器中執行phpinfo();方法的php檔案查詢

將gray.so放入目錄假定$php/ext/

$ gedit php.ini

修改extension_dir並新增擴充套件如下:

extension_dir = '$php/ext/'

extension=gray.so

6.測試

$ gedit $apache2/htdocs/test.php  //編寫測試php檔案

<?php

echo gray(

20,30,55

);?>

7:重啟apache

# $apache2/bin/apachectl restart

在瀏覽器localhost/test.php檢視輸出  29  

結束···

Linux下php新增新擴充套件

今天幹了一件很嚴重的錯事,用tp開發完新專案後,傳到伺服器上報錯,網上查了一下,說未載入pdo,就載入吧。找到配置檔案php.ini,搜到 extension php pdo mysql.dll,去掉前面的注釋,重啟伺服器,看似一切正常,卻大錯特錯。linux下應該是.so,而不是.dll,php原...

Linux下php新增新擴充套件

今天幹了一件很嚴重的錯事,用tp開發完新專案後,傳到伺服器上報錯,網上查了一下,說未載入pdo,就載入吧。找到配置檔案php.ini,搜到 extension php pdo mysql.dll,去掉前面的注釋,重啟伺服器,看似一切正常,卻大錯特錯。linux下應該是.so,而不是.dll,php原...

Linux下php新增redis擴充套件

檢視php版本 php v 如下 php 7.1.25 cli built dec 6 2018 22 54 10 nts php 7.1.25 cli built dec 6 2018 22 54 10 nts 列出所有的可以安裝的php軟體包列表 yum list grep php71w 結果大...