使用clion開發php擴展的簡單介紹

本文目錄一覽:

PHP軟件開發程序拓展的五大方法?

相信大多數程序員都有過對程序進行拓展的一些操作了,但是對於新手工程師來說這還是比較難的一個技術。今天,雲南java培訓就通過案例分析來了解和學習一下,PHP編程拓展的方法都有哪些。

1.使用PHP的APC特性。APC——AlternativePHPCache,雖然官方稱為“可選PHP緩存”,但是稱為“另一個PHP緩存也不為過”,因為它可以切實的提升網站的性能。

2.把所有不是.php的請求都分配給CDN(內容分髮網絡),不要使用你的服務器處理靜態文件。他們使用S3來存儲所有,並使用CloudFront作為他們的CDN。近CloudFront出現的一些問題迫使他們不得不直接使用S3服務。

3.切勿將PHP代碼里的鏈接指向其它的服務器。比如數據庫以及memcache服務器,除非是強制性的或者是沒有其它方法實現你的目的。在執行流中讓鏈接指向其它服務器是非常沒有效率的:可能會使服務器受到限制,從而降低處理的速度。使用APC鍵/值存儲來儲存數據,並使用Barnish來緩存整個頁面。

4.使用Varnish。一般情況下,站點上的所有網頁都不會改變或者是不會做大型的改動。Varnish就對於網絡服務器緩存有着Memcache/ModRewrite的作用。同樣在壓力測試中,使用前後的性能差異很大。

5.使用更大的服務器實例,比如c1.xlarge有8個核心可以應對負載,而m1.medium只有一個核心可以處理請求。

可以使用GoogleAnalytics來分析每個用戶在每個頁面上花費的時間。收集這些信息,使用Siege來運行壓力測試,從而不斷的熟悉自己業務的負載類型,以便更好的提升程序的擴展性。

如何用C語言編寫PHP擴展的詳解

1:預定義

在home目錄,也可以其他任意目錄,寫一個文件,例如caleng_module.def

內容是你希望定義的函數名以及參數:

int a(int x,int y)

string b(string str,int n)

2:到php源碼目錄的ext目錄

#cd /usr/local/php-5.4.0/ext/

執行命令,生成對應擴展目錄

#./ext_skel –extname=caleng_module –proto=/home/hm/caleng_module.def

3:修改config.m4

去掉dnl的注釋

PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,

Make sure that the comment is aligned:

[  –enable-caleng_module           Enable caleng_module support])

4:修改caleng_module.c

代碼如下:

/* {{{ proto int a(int x, int y)

   */

PHP_FUNCTION(a)

{

int argc = ZEND_NUM_ARGS();

int x;

int y;

   int z;

if (zend_parse_parameters(argc TSRMLS_CC, “ll”, x, y) == FAILURE)

 return;

z=x+y;

 RETURN_LONG(z);

}

/* }}} */

/* {{{ proto string b(string str, int n)

   */

PHP_FUNCTION(b)

{

char *str = NULL;

   int argc = ZEND_NUM_ARGS();

   int str_len;

   long n;

   char *result;

   char *ptr;

   int result_length;

   if (zend_parse_parameters(argc TSRMLS_CC, “sl”, str, str_len, n) == FAILURE)

       return;

   result_length = str_len * n;

   result = (char *) emalloc(result_length + 1);

   ptr = result;

   while (n–) {

       memcpy(ptr, str, str_len);

       ptr += str_len;

   }

   *ptr = ‘\0’;

   RETURN_STRINGL(result, result_length, 0);

}

/* }}} */

5:生成擴展庫

#cd ./caleng_module

#/usr/local/php/bin/phpize

#./configure –with-php-config=/usr/local/php/bin/php-config

#make

#make install

6:到php的對應extensions目錄

如上圖所示

#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

改目錄下有生成的caleng_module.so文件

7:修改php.ini

php.ini如果找不到可以從phpinfo()打出的信息看到

#cd /usr/local/php/lib/

php.ini增加擴展信息

extension=caleng_module.so

8:重啟Apache

# /usr/local/apache2/bin/apachectl restart

9:檢查加載

/usr/local/php/bin/php -m

10:PHP調用

代碼如下:

echo a(1,2);

輸出 3  就說明成功了!

下面是原文

Linux下用C開發PHP擴展

一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13

一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13

# cd /software/php-5.2.13/ext

二、假設我們要開發一個名為caleng_module的擴展,該擴展包含兩個函數:a–處理兩個整型相加和b-處理字符串重複輸出;

1、首先編寫一個函數定義文件,該文件編寫函數原型後綴為def,假設為:caleng_module.def

int a(int x, int y)

string b(string str, int n)

2、通過擴展骨架生成器,將在ext目錄下自動建立擴展目錄caleng_module

# ./ext_skel –extname=caleng_module –proto=caleng_module.def

3、修改配置文件: # vim /software/php-5.2.13/ext/caleng_module/config.m4,將如下行的注釋標籤”dnl”去掉,修改後如下所示:

PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,

Make sure that the comment is aligned:

[  –enable-myfunctions           Enable myfunctions support])

4、完善函數a和b的功能: # vim /software/php-5.2.13/ext/caleng_module/caleng_module.c

PHP_FUNCTION(a)

{

   int x, y, z;

   int argc = ZEND_NUM_ARGS();

   if (zend_parse_parameters(argc TSRMLS_CC, “ll”, x, y) == FAILURE)

       return;

   z = x + y;

   RETURN_LONG(z);

}

PHP_FUNCTION(b)

{

   char *str = NULL;

   int argc = ZEND_NUM_ARGS();

   int str_len;

   long n;

   char *result;

   char *ptr;

   int result_length;

   if (zend_parse_parameters(argc TSRMLS_CC, “sl”, str, str_len, n) == FAILURE)

       return;

   result_length = str_len * n;

   result = (char *) emalloc(result_length + 1);

   ptr = result;

   while (n–) {

       memcpy(ptr, str, str_len);

       ptr += str_len;

   }

   *ptr = ‘\0’;

   RETURN_STRINGL(result, result_length, 0);

}

三、編譯安裝,假設php的安裝目錄為:/usr/localhost/webserver/php

# cd /software/php-5.2.13/ext/caleng_module

# /usr/localhost/webserver/php/bin/phpize

# ./configure –with-php-config=/usr/localhost/webserver/php/bin/php-config

# make

# make install

現在將在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目錄下生成caleng_module.so文件

在php.ini配置文件中加入: extension=caleng_module.so.

如何編寫一個PHP的C擴展

一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13

一、首先下載PHP源碼包,假設源碼包目錄為:/software/php-5.2.13

# cd /software/php-5.2.13/ext

二、假設我們要開發一個名為caleng_module的擴展,該擴展包含兩個函數:a–處理兩個整型相加和b-處理字符串重複輸出;

1、首先編寫一個函數定義文件,該文件編寫函數原型後綴為def,假設為:caleng_module.def

int a(int x, int y)

string b(string str, int n)

2、通過擴展骨架生成器,將在ext目錄下自動建立擴展目錄caleng_module

# ./ext_skel –extname=caleng_module –proto=caleng_module.def

3、修改配置文件: # vim /software/php-5.2.13/ext/caleng_module/config.m4,將如下行的注釋標籤”dnl”去掉,修改後如下所示:

PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,

Make sure that the comment is aligned:

[ –enable-myfunctions Enable myfunctions support])

4、完善函數a和b的功能: # vim /software/php-5.2.13/ext/caleng_module/caleng_module.c

PHP_FUNCTION(a)

{

int x, y, z;

int argc = ZEND_NUM_ARGS();

if (zend_parse_parameters(argc TSRMLS_CC, “ll”, x, y) == FAILURE)

return;

z = x + y;

RETURN_LONG(z);

}

PHP_FUNCTION(b)

{

char *str = NULL;

int argc = ZEND_NUM_ARGS();

int str_len;

long n;

char *result;

char *ptr;

int result_length;

if (zend_parse_parameters(argc TSRMLS_CC, “sl”, str, str_len, n) == FAILURE)

return;

result_length = str_len * n;

result = (char *) emalloc(result_length + 1);

ptr = result;

while (n–) {

memcpy(ptr, str, str_len);

ptr += str_len;

}

*ptr = ‘\0’;

RETURN_STRINGL(result, result_length, 0);

}

三、編譯安裝,假設php的安裝目錄為:/usr/localhost/webserver/php

# cd /software/php-5.2.13/ext/caleng_module

# /usr/localhost/webserver/php/bin/phpize

# ./configure –with-php-config=/usr/localhost/webserver/php/bin/php-config

# make

# make install

現在將在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目錄下生成caleng_module.so文件

在php.ini配置文件中加入: extension=caleng_module.so.

搞定收工

windows下開發並編譯PHP擴展的方法

現在就簡單說一在WINDOWS下開發PHP擴展的步驟:

首先需要準備的軟件有:

cygwin

安裝路徑e:\app\cygwin

visual

studio

C++

6.0,

修改環境變量,把已經安裝好的PHP路徑設置為環境變量。在這裡,假設我的PHP安裝目錄是:e:\app\php5.2.5,那麼我把WINDOWS環境變量後面加上這個安裝目錄。方便一會兒使用php.exe。

PHP源代碼,這裡假設為e:\c_source_code\php-5.2.5

1、修改文件

“PHP源文件目錄/ext/ext_skel_win32.php”,在這裡就是:E:\c_source_code\php-5.2.5\ext,其中主要是修改其中的cygwin路徑。$cygwin_path

=

‘e:\app\cygwin\bin’;

把$cygwin_path修改為你實際安裝cygwin的路徑。

2、在源代碼ext目錄也就是e:\c_source_code\php-5.2.5\ext下,執行

php

ext_skel_win32.php

–extname=EXT_NAME,此時會在ext目錄下生成EXT_NAME目錄,這個目錄就是我們將要進行PHP擴展開發的框架。比如你運行php.exe

ext_skel_win32.php

–extname=foo,會在ext目錄下生成foo目錄。

3、將php-root\dev\php5ts.lib拷貝至

“ext/EXT_NAME”中。比如你要開發的PHP擴展名為foo,那麼就需要把php-root\dev\php5ts.lib拷貝到PHP源文件目錄\ext\foo中。

4、修改foo.c內容,編寫我們需要的C代碼。

5、進入EXT_NAME目錄,打開EXT_NAME.dsp。

設置VC6工程,

設置菜單“組建”-“移除工程配置”,選中“Win

32

Release_TS”,

設置菜單“工程”,選中“Win

32

Release_TS”

打開Tab“連接”,設置“輸出文件名”中的目錄,

[可選]打開Tab“C/C++”,增加“預處理器定義”“,COMPILE_DL_EXT_NAME”(注意全大寫,默認加入的),取消預定義“LIBZEND_EXPORTS”(否則不可引入zend函數)。

6、設置好以後,進行編譯,會生成一個dll文件,文件名是EXT_NAME.dll,比如在我們的例子中就為foo.dll

把foo.dll拷到e:\app\ext目錄下,並在php.ini里加上一行extension=foo.dll,重啟一下apache,查看phpinfo();,會發現我們的PHP擴展foo()已經加載進來,已經可以使用這個foo擴展了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/304680.html

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

相關推薦

  • PHP和Python哪個好找工作?

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

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的“畫筆”在窗口中繪製…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Python櫻花樹代碼簡單

    本文將對Python櫻花樹代碼進行詳細的闡述和講解,幫助讀者更好地理解該代碼的實現方法。 一、簡介 櫻花樹是一種圖形效果,它的實現方法比較簡單。Python中可以通過turtle這…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python大神作品:讓編程變得更加簡單

    Python作為一種高級的解釋性編程語言,一直被廣泛地運用於各個領域,從Web開發、遊戲開發到人工智能,Python都扮演着重要的角色。Python的代碼簡潔明了,易於閱讀和維護,…

    編程 2025-04-28
  • 用Python實現簡單爬蟲程序

    在當今時代,互聯網上的信息量是爆炸式增長的,其中很多信息可以被利用。對於數據分析、數據挖掘或者其他一些需要大量數據的任務,我們可以使用爬蟲技術從各個網站獲取需要的信息。而Pytho…

    編程 2025-04-28
  • 如何製作一個簡單的換裝遊戲

    本文將從以下幾個方面,為大家介紹如何製作一個簡單的換裝遊戲: 1. 遊戲需求和界面設計 2. 使用HTML、CSS和JavaScript開發遊戲 3. 實現遊戲的基本功能:拖拽交互…

    編程 2025-04-27

發表回復

登錄後才能評論