我們先假設業務場景,是需要有這麼一個擴展,提供一個叫ccvita_string的函數,他的主要作用是回傳一段字元。 (這個業務場景實在太假,大家就這麼看看吧)對應的PHP代碼可能是這樣:
<span>function</span> ccvita_string(<span>$str</span><span>){ </span><span>$result</span> = '<a href="'.<span>$str</span>.'">Link</a>'<span>; </span><span>return</span><span>$result</span><span>; }</span>
第一步,生成代碼
PHP為了擴展開發的方便,提供了一個類似代碼生成器的工具ext_skel,具體可以參考說明。
首先我們創建一個檔案ccvita.skel,它的內容為
<span>string</span> ccvita_string(<span>string</span> str)
就是告訴ext_skel這個東西,我們要做的擴充裡面有個函數叫ccvita_string。然後執行
cd MooENV/src/php-<span>5.3</span>.<span>8</span>/ext/<span>.</span>/ext_skel --extname=ccvita --proto=<span>ccvita.skel cd ccvita</span>/
這時候,ccvita這個擴充的程式碼框架就已經出來了。
第二步,修改配置
然後修改config.m4檔案將10、11、12三行最前面的dnl刪除掉,就是將
dnl PHP_ARG_WITH(ccvita, for ccvita support,<span>dnl Make sure that the comment is aligned: dnl </span><span>[</span><span> --with-ccvita Include ccvita support</span><span>]</span>)
修改為
PHP_ARG_WITH(ccvita, for ccvita support,<span>Make sure that the comment is aligned: </span><span>[</span><span> --with-ccvita Include ccvita support</span><span>]</span>)
找到將ccvita_string這個函式修改為
<span>PHP_FUNCTION(ccvita_string) { </span><span>char</span> *str =<span> NULL; </span><span>int</span> argc =<span> ZEND_NUM_ARGS(); </span><span>int</span><span> str_len; </span><span>char</span> *<span>result; </span><span>if</span> (zend_parse_parameters(argc TSRMLS_CC, <span>"</span><span>s</span><span>"</span>, &str, &str_len) ==<span> FAILURE) </span><span>return</span><span>; str_len </span>= spprintf(&result, <span>0</span>, <span>"</span><span><a href=\"%.78s\">Link</a></span><span>"</span><span>, str); RETURN_STRINGL(result, str_len, </span><span>0</span><span>); }</span>
儲存後,開始編譯
/usr/local/php/bin/<span>phpize .</span>/configure --with-php-c/local/php/bin/php-<span>config </span><span>make</span>
<span>cp</span> modules/ccvita.so /usr/local/php/ext/<span>vim </span>/usr/local/php/etc/<span>php.ini extension</span>=/usr/local/php/ext/<span>ccvita.so #在php.ini文件最后增加这一行 service php</span>-<span>fpm restart #重启PHP服务 </span><span>cp</span> ccvita.php /data/www/wwwroot/default/
相關程式碼,可以在我的github上clone出來,位址:https://github.com/KimiChen/PHP-EXT接下來就可以存取ccvita.php這個文件,測試擴充了。下一篇,將會涉及一些更深入的內容。
轉自部落格(http://www.ccvita.com/496.html)
以上就介紹了PHP擴展開發01:第一個擴展,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。