假定手動配置好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 // 用此命令,使剛才寫的配置檔案生效
寫段程式驗證其正確性:
#includeintmain()
編譯並執行:
$ 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)4. 然後執行 phpize 程式,生成configure指令碼:result=rgb_to_gray(r,g,b);
return_long(result);
}
$ 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 結果大...