本文目錄一覽:
- 1、php中怎麼將c語言代碼編譯為php可用擴展
- 2、php怎樣和c語言混合編程
- 3、編寫PHP擴展必須要學習C語言嗎
- 4、學習C語言可以做什麼?
- 5、關於用C語言寫的mysql訪問程序,作成PHP擴展的問題。
- 6、如何用c語言在windows平台上開發php extension
php中怎麼將c語言代碼編譯為php可用擴展
還是得使用C語言的編譯器,,,,,按PHP的擴展規範去寫、編譯、鏈接
~
php怎樣和c語言混合編程
php是一個腳本語言,如果需要系統調用,需要用C語言編寫一個擴展來實現,另外C是靜態編譯的,執行效率比PHP代碼高很多。同樣的運算代碼,使用C來開發,性能會比PHP要提升數百倍。編寫好的php擴展要在編譯php源碼時加進去。
編寫PHP擴展必須要學習C語言嗎
php整個底層都是用c語言寫的,擴展庫的開發,必須具備c語言的知識。
學習C語言可以做什麼?
1. 後端開發
主流的後端開發語言就那麼幾種,以Java、C/C++領銜,Python和Go緊跟其後。
2. 遊戲開發
掌握了C/C++基本語法之後,開發遊戲也依然是一個不錯的選擇,目前工業級別的3D遊戲引擎仍然是用C或C++編寫的。
雖然以個人能力無法去完成一個龐大的網絡遊戲,但是從簡單開始,編寫一些小遊戲,然後逐漸深入,循序漸進並最終加入大型遊戲開發團隊還是非常好的一個選擇。與之相應的就業崗位主要有遊戲開發工程師、遊戲引擎架構工程師等。
3. 客戶端開發
畢竟C/C++已經是一個很成熟的語言了,所以除了後端開發其實它還有很多其它的開發崗位可以選擇。自然而然的,就是客戶端開發了。
相信大多數學C/C++的同學都用過C/C++寫桌面軟件吧。那時候估計還是用MFC,照着代碼書上敲一遍就能寫一個比較簡單的界面了。所以如果不想做後端,完全可以靠C/C++找一份客戶端開發的工作。做客戶端同樣也需要紮實的編程基礎和計算機理論基礎,同時可能還要熟悉Windows/C++編譯鏈接機制、QT客戶端開發技術體系、Windows消息機制等技術。
4. 多媒體開發
目前多媒體技術同樣滲入到人們的日常生活中,音視頻已經成為人們獲取信息的一個非常重要的手段。音視頻在傳輸過程中都是經過壓縮並且按照一定規則打包過的。視頻的編碼技術從最開始的H.261到如今的H.265,經歷了30多年的發展,而且實現代碼全部是由C或C++實現。
5. 嵌入式開發
上面幾種崗位選擇都是偏軟件方向想的,而C/C++還有一類非常大的就業方向,就是去做嵌入式。嵌入式本身可能是偏硬件一點,但是現在做個什麼事,都是軟硬不分家的。
嵌入式的開發同樣也會涉及到網絡編程、並發編程等方面。通俗點解釋可能就是,嵌入式代碼是運行在別的小系統上,而不是傳統意義的計算機上。這個方向除了需要編程能力,還需要基本的電路理論素養。
6. 人工智能
人工智能、機器學習等方向也少不了C或C++語言的身影。
需要強調的是雖然C/C++語言可以從事的方向非常廣泛,但是僅僅掌握C/C++語法是遠遠不夠的,上述的應用領域C/C++語言是基礎,進入這些領域還需要進一步深入系統學習相關領域的知識以及去接觸真實企業項目的內容。
關於用C語言寫的mysql訪問程序,作成PHP擴展的問題。
編譯時配置好依賴關係吧,然後如果PHP環境比較多,別弄錯環境就好了。
如何用c語言在windows平台上開發php extension
何使用C語言發PHP擴展
函數功能:php面整數符號數其內部實現其實longunsigned long於32位機器說php能表示整數2^31-1般應用碰於2^31-1於2^32數能用字符串表示於mixed int_ext(string in)說字符串in表示整數於2^31-1返整數於返字符串
發擴展步驟:(首先需要載php源碼載php-5.3.14)
1建立擴展骨架
[plain] view plaincopyprint?
01.cd php-5.3.14/ext
02../ext_skel –extname=int_ext
cd php-5.3.14/ext
./ext_skel –extname=int_ext
2修改編譯參數
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi config.m4
cd php-5.3.14/ext/int_ext
vi config.m4掉 PHP_ARG_ENABLE(int_ext, whether to enable int_ext support
[ –enable-int_ext Enable int_ext support]) 兩行前面dnl 修改:
[plain] view plaincopyprint?
01.1. dnl Otherwise use enable:
02.2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
03.3. dnl Make sure that the comment is aligned:
04.4. [ –enable-int_ext Enable int_ext support])
1. dnl Otherwise use enable:
2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
3. dnl Make sure that the comment is aligned:
4. [ –enable-int_ext Enable int_ext support])
3編寫C代碼
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi php_int_ext.h
03.# PHP_FUNCTION(confirm_int_ext_compiled); 面新增行 PHP_FUNCTION(int_ext);
cd php-5.3.14/ext/int_ext
vi php_int_ext.h
# PHP_FUNCTION(confirm_int_ext_compiled); 面新增行 PHP_FUNCTION(int_ext);[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi int_ext.c
03.#PHP_FE(confirm_int_ext_compiled, NULL) 面添加 PHP_FE(int_ext, NULL)添加:
04.1. zend_function_entry int_ext_functions[] = {
05.2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
06.3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
07.4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
08.5. };
cd php-5.3.14/ext/int_ext
vi int_ext.c
#PHP_FE(confirm_int_ext_compiled, NULL) 面添加 PHP_FE(int_ext, NULL)添加:
1. zend_function_entry int_ext_functions[] = {
2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
5. };
核代碼:
[plain] view plaincopyprint?
01.PHP_FUNCTION(int_ext)
02.{
03. char * str = NULL;
04. int str_len;
05. int argc = ZEND_NUM_ARGS();
06. if(zend_parse_parameters(argc TSRMLS_CC,”s”,str,str_len) == FAILURE)
07. return ;
08. char * result;
09. int result_length = str_len;
10. result = (char *) emalloc(result_length + 1);
11. memcpy(result,str,result_length);
12. unsigned long result_num = strtoul(result, NULL, 10);
13. int sizeoflong sizeof(long);
14. unsigned long max_long = 1 (sizeoflong * 8 -1);
15. if(result_num max_long)
16. {
17. RETURN_LONG(result_num);
18. }
19. else
20. {
21. RESULT_STRINGL(result, result_length, 0);
22. }
23.}
PHP_FUNCTION(int_ext)
{
char * str = NULL;
int str_len;
int argc = ZEND_NUM_ARGS();
if(zend_parse_parameters(argc TSRMLS_CC,”s”,str,str_len) == FAILURE)
return ;
char * result;
int result_length = str_len;
result = (char *) emalloc(result_length + 1);
memcpy(result,str,result_length);
unsigned long result_num = strtoul(result, NULL, 10);
int sizeoflong sizeof(long);
unsigned long max_long = 1 (sizeoflong * 8 -1);
if(result_num max_long)
{
RETURN_LONG(result_num);
}
else
{
RESULT_STRINGL(result, result_length, 0);
}
}
4編譯
[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02./usr/local/php/bin/pphpize
03../configure –with-php-config=/usr/local/php/bin/php-config
04.make
05.make install
cd php-5.3.14/ext/int_ext
/usr/local/php/bin/pphpize
./configure –with-php-config=/usr/local/php/bin/php-config
make
make install
產so文件: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so
修改php.ini 添加擴展extension_dir = “/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/”
[int_ext]
extension = int_ext.so
5測試
[plain] view plaincopyprint?
01.$a = int_ext(“12345678900”);
02.var_dump($a);
03.$a = int_ext(“123456789”);
04.var_dump($a);
$a = int_ext(“12345678900”);
var_dump($a);
$a = int_ext(“123456789”);
var_dump($a);
結輸:
[plain] view plaincopyprint?
01.string(11) “12345678900”
02.int(123456789)
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238507.html