c語言編寫php擴展(php擴展開發中文教程)

本文目錄一覽:

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-tw/n/238507.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • MQTT使用教程

    MQTT是一種輕量級的消息傳輸協議,適用於物聯網領域中的設備與雲端、設備與設備之間的數據傳輸。本文將介紹使用MQTT實現設備與雲端數據傳輸的方法和注意事項。 一、準備工作 在使用M…

    編程 2025-04-29
  • Python3.6.5下載安裝教程

    Python是一種面向對象、解釋型計算機程序語言。它是一門動態語言,因為它不會對程序員提前聲明變數類型,而是在變數第一次賦值時自動識別該變數的類型。 Python3.6.5是Pyt…

    編程 2025-04-29
  • Deepin系統分區設置教程

    本教程將會詳細介紹Deepin系統如何進行分區設置,分享多種方式讓您了解如何規劃您的硬碟。 一、分區的基本知識 在進行Deepin系統分區設置之前,我們需要了解一些基本分區概念。 …

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • 寫代碼新手教程

    本文將從語言選擇、學習方法、編碼規範以及常見問題解答等多個方面,為編程新手提供實用、簡明的教程。 一、語言選擇 作為編程新手,選擇一門編程語言是很關鍵的一步。以下是幾個有代表性的編…

    編程 2025-04-29
  • Qt雷達探測教程

    本文主要介紹如何使用Qt開發雷達探測程序,並展示一個簡單的雷達探測示例。 一、環境準備 在開始本教程之前,需要確保你的開發環境已經安裝Qt和Qt Creator。如果沒有安裝,可以…

    編程 2025-04-29
  • Python讀取中文

    Python是一種高級編程語言,被廣泛地應用於各種領域中。而處理中文數據也是其中重要的一部分。本文將介紹在Python中如何讀取中文,為大家提供指導和幫助。 一、讀取中文文件 在P…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29

發表回復

登錄後才能評論