下面我來講講如何作一個php的擴充
首先要有一個搭建好的php環境
我把php的安裝在了/usr/local/php當然也通過
php的一個配置php.ini的路徑但是要注意了
用這種方法安裝的php擴充不能實作
我們在php安裝以後的/usr/local/php/bin目錄
找到這個檔案phpize稍後我們将用到他
他就是個shell腳本你可以用vi phpize來檢視他的内容
但是你要注意了這個腳本不是在哪裡都可以應用的
[root@ns root]# phpize
Cannot find config.m4.
Make sure that you run /usr/local/bin/phpize in the top level source directory of the module
你會看到這兩種結果實際上你檢視了這個腳本
很輕松的就會發現是怎麼來處理的
你的模擴充的時候最好
放在/usr/local/php/php-5.3.28/ext下
來執行他你在這裡也可以這樣/usr/local/php/bin/phpize來執行也可以
phpize來執行
我們在/usr/local/php/php-5.3.28/ext下找到這個工具
來建立一個php擴充的一個架構
[root@ns ext]#cd /usr/local/php/php-5.3.28/ext/
[root@ns ext]# ./ext_skel --extname=sdomain
Creating directory sdomain
Creating basic files: config.m4 .cvsignore sdomain.c php_sdomain.h CREDITS EXPERIMENTAL tests/001.phpt sdomain.php [done].
To use your new extension, you will have to execute the following steps:
1. $ cd ..
2. $ vi ext/sdomain/config.m4
3. $ ./buildconf
4. $ ./configure --[with|enable]-sdomain
5. $ make
6. $ ./php -f ext/sdomain/sdomain.php
7. $ vi ext/sdomain/sdomain.c
8. $ make
Repeat steps 3-6 until you are satisfied with ext/sdomain/config.m4 and
step 6 confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
執行了這個步驟以後你會看到這樣的結果
這樣以後我們會在這個目錄下生成一個目錄叫sdomain
進入這裡面我們看看
[root@ns ext]# cd sdomain/
[root@ns sdomain]# ls
config.m4 EXPERIMENTAL sdomain.php tests
CREDITS sdomain.c php_sdomain.h
然後我們要修改檔案順序是
configue.m4
sdomain.c
php_sdomain.h
使用文本編輯器打開config.m4檔案,檔案内容大緻如下:
dnl $Id$d
dnl config.m4 for extension my_module
dnl dont forget to call PHP_EXTENSION(my_module)
dnl Comments in this file start with the string dnl.
dnl Remove where necessary. This file will not work
dnl without editing.
dnl If your extension references something external, use with:
dnl PHP_ARG_WITH(my_module, for my_module support,
dnl Make sure that the comment is aligned:
dnl [ --with-my_module Include my_module support])
dnl Otherwise use enable:
dnl PHP_ARG_ENABLE(my_module, whether to enable my_module support,
dnl [ --enable-my_module Enable my_module support])
if test $PHP_MY_MODULE != no; then
dnl If you will not be testing anything external, like existence of
dnl headers, libraries or functions in them, just uncomment the
dnl following line and you are ready to go.
dnl Write more examples of tests here...
PHP_EXTENSION(my_module, $ext_shared)
Fi
根據你自己的選擇将
修改成
PHP_ARG_WITH(my_module, for my_module support,
[ --with-my_module Include my_module support])
或者将
修改成
PHP_ARG_ENABLE(my_module, whether to enable my_module support,
[ --enable-my_module Enable my_module support])
(其實就是将這部分的dnl去掉,在這個檔案裡dnl就是注釋的意思,相當于我們PHP裡面的#或// 另外把他中間的一句描術也去掉)
我這裡用了後者
然後儲存退出
然後在編輯
Vi my_module.c
将檔案其中的下列代碼進行修改
/* Every user visible function must have an entry in my_module_functions[].
*/
function_entry my_module_functions[] = {
PHP_FE(say_hello, NULL) /* ?添加着一行代碼 */
PHP_FE(confirm_my_module_compiled, NULL) /* For testing, remove later. */
{NULL, NULL, NULL} /* Must be the last line in my_module_functions[] */
};
在檔案的最後添加下列代碼
PHP_FUNCTION(say_hello)
{
zend_printf("hello sdomain!");
}
再修改:php_sdomain.h
vi php_sdomain.h
在PHP_FUNCTION(confirm_my_module_compiled ); /* For testing, remove later. */ 這行的下面添加一行:
PHP_FUNCTION(say_hello); /* For testing, remove later. */
儲存檔案退出
然後我們就可以在這個目錄下使用上面的指令了
/usr/local/php/bin/phpize
執行以後會看到下面的
[root@ns sdomain]# /usr/local/php/bin/phpize
Configuring for:
PHP Api Version: 20020918
Zend Module Api No: 20020429
Zend Extension Api No: 20050606
[root@ns sdomain]#
然後執行./configure --with-php-config=/usr/local/php/bin/php-config
然後執行make
make install
然後他會把對應的so檔案生成放到PHP安裝目錄下面的一個檔案夾,并提示在在什麼地方,然後再把裡面的SO檔案拷到你存放SO檔案的地方
即你在php.ini裡面的extension_dir所指定的位置
最後一步是你在php.ini檔案中打開這個擴充
extension=sdomain.so
然後
重新起動apache
用phpinfo來察看一下ok了
本文轉自奔跑在路上部落格51CTO部落格,原文連結http://blog.51cto.com/qiangsh/1551038如需轉載請自行聯系原作者
qianghong000