時間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評論(0)
公司需要對通行證用戶資料的教檢函數(shù)封包(防止服務器淪陷,用戶資料被解密),需要開發(fā)一個擴展函數(shù),
username是cookie中的username,
hashkey 是 cookie中的 PName
開發(fā)php ext: 函數(shù)名為csdn_verify_auth,參數(shù)是username 和 hashkey ,(算法機密文件略)
第一次寫PHP擴展,搜索資料到編寫測試用了一天半完成,記錄一下吧,以后如果需要做的話大部分時間只能浪費在C算法上。
1.先down一個php下來,編譯安裝:(編譯環(huán)境只做測試擴展用)
wget http://cn2.php.net/get/php-5.2.13.tar.gz/from/cn.php.net/mirror
tar zxvf php-5.2.13.tar.gz
cd php-5.2.13
./configure --prefix=/csdn_verify_auth/php --with-config-file-path=/csdn_verify_auth/php/etc
make ZEND_EXTRA_LIBS='-liconv'
make install
cp php.ini-dist /csdn_verify_auth/php/etc/php.ini
2.修改一下vi /csdn_verify_auth/php/etc/php.ini中的extension_dir = "./"
修改為extension_dir = "/csdn_verify_auth/php/lib/php/extensions/no-debug-non-zts-20060613"
并在此行后增加以下,然后保存:
extension = "csdn_verify_auth.so"
csdn_verify_auth改為你開發(fā)的擴展的名字
3.開始創(chuàng)建擴展項目
進入源碼目錄
cd /csdn_verify_auth/php-5.2.13/ext/
./ext_skel --extname=csdn_verify_auth
創(chuàng)建名字為csdn_verify_auth的項目,最終會生成csdn_verify_auth.so
4.更改配置和擴展程序開發(fā)
vi ext/csdn_verify_auth/config.m4
根據(jù)你自己的選擇將
dnl PHP_ARG_WITH(csdn_verify_auth, for csdn_verify_auth support,
dnl Make sure that the comment is aligned:
dnl [ --with-csdn_verify_auth Include csdn_verify_auth support])
去掉dnl
或者將
dnl PHP_ARG_ENABLE(csdn_verify_auth, whether to enable csdn_verify_auth support,
dnl Make sure that the comment is aligned:
dnl [ --enable-csdn_verify_auth Enable csdn_verify_auth support])
去掉dnl
vi ext/csdn_verify_auth/php_csdn_verify_auth.h
將
PHP_FUNCTION(confirm_csdn_verify_auth_compiled); /* For testing, remove later. */
更改為
PHP_FUNCTION(csdn_verify_auth);
vi ext/csdn_verify_auth/csdn_verify_auth.c
將
zend_function_entry php5cpp_functions[] = {
PHP_FE(confirm_csdn_verify_auth_compiled, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in php5cpp_functions[] */
};
更改為
zend_function_entry php5cpp_functions[] = {
PHP_FE(csdn_verify_auth, NULL)
{NULL, NULL, NULL} /* Must be the last line in php5cpp_functions[] */
};
在最后添加:
PHP_FUNCTION(csdn_verify_auth)
{
zend_printf("hello world\n");
}
5.編譯生成so文件
cd /csdn_verify_auth/php-5.2.13/ext/csdn_verify_auth/
/csdn_verify_auth/php/bin/phpize
./configure --with-php-config=/csdn_verify_auth/php/bin/php-config
make
mv /csdn_verify_auth/php-5.2.13/ext/csdn_verify_auth/modules/csdn_verify_auth.so /csdn_verify_auth/php/lib/php/extensions/no-debug-non-zts-20060613
cd ../../../
6.測試擴展
vi /csdn_verify_auth/hello.php
csdn_verify_auth();
?>
/csdn_verify_auth/php/bin/php hello.php
hello world.
OK
主要用到的api就那么幾個:
ZEND_NUM_ARGS()、zend_parse_parameters(args TSRMLS_CC, "ss", &username, &username_length, &hash, &hash_length) 參數(shù)接收系列
RETURN_FALSE。。RETURN_STRINGL(s, l, dup)等返回系列函數(shù)
…………………
其他的基本就是C了,再次感嘆下,學好C語言,走到哪都不怕。
關鍵詞標簽:php擴展
相關閱讀
熱門文章 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 2021年最好用的10款php開發(fā)工具推薦 php利用淘寶IP庫獲取用戶ip地理位置 在 PHP 中使用命令行工具
人氣排行 詳解ucenter原理及第三方應用程序整合思路、方法 plsql developer怎么連接數(shù)據(jù)庫-plsql developer連接數(shù)據(jù)庫方法 PHP中防止SQL注入攻擊 PHP會話Session的具體使用方法解析 PHP運行出現(xiàn)Notice : Use of undefined constant 的解決辦法 PHP如何清空mySQL數(shù)據(jù)庫 CakePHP程序員必須知道的21條技巧 PHP采集圖片實例(PHP采集)