PHP 底層實現

來源:互聯網
上載者:User
?


2、 請在local環境,編譯PHP,要求:版本5.4, 5.5, 5.6,每個版本要涵蓋3個編譯版本,包括nts \ zts \ debug

/usr/lib/apache2/modules


/etc/apache2/mods-enabled/

vim php5.load



.編譯php的ztf,ntf,debug模式

a.安裝apsx工具 apt-get install apache-dev

b.在php源碼包下運行 ./configure --prefix=/home/merlin/make_php_version/php-5.4-zts-debug/ --enable-maintainer-zts --with-apxs2=/usr/bin/apxs2 --enable-debug

c.make&&make install 在/usrb/apache2/modules下產生libphp5.so檔案

d.在/etc/apache2/mods-enabled下php5.load中添加模組檔案.so


編譯報錯 解決 undefined reference to `libiconv_open'



設定檔:

在安裝包中找到php.ini.development 拷貝到安裝後的目錄下的lib裡

每次執行該版本的php 要指定目錄

例如:/home/merlin/php_version/php-5.5.21-zts-debug/bin/php -i|grep php.ini


解決方案:
#wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
#tar -zxvf libiconv-1.13.1.tar.gz
#cd libiconv-1.13.1
# ./configure --prefix=/usr/local/libiconv
# make
# make install


再檢查php,指定 iconv的位置 --with-iconv=/usr/local/libiconv



3、 編寫一個簡單的PHP擴充,實現3個PHP方法,分別接收參數,並完成結果輸出:

a. 數字a與數字b的,加、減、乘、除

b. 字串a,在字串b中的重複次數

c. 數組a與數組b的交集與差集


參考 http://www.laruence.com/2009/04/28/719.html


源碼包執行

  1. ./ext_skel --extname=myfunctions --proto=myfunctions.def


make clean && make && make install

/etc/php5 操作ini 以及移動so檔案


類型指定符 對應的C類型 描述
l long 符號整數
d double 浮點數
s char *, int 二進位字串,長度
b zend_bool 邏輯型(1或0)
r zval * 資源(檔案指標,資料庫連接等)
a zval * 聯合數組
o zval * 任何類型的對象
O zval * 指定類型的對象。需要提供目標對象的類類型
z zval * 無任何操作的zval

if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sdd",&str,&str_len,&a,&b) == FAILURE){

return;

}



設定傳回值並且結束函數 設定傳回值 宏傳回型別和參數
RETURN_LONG(l) RETVAL_LONG(l) 整數
RETURN_BOOL(b) RETVAL_BOOL(b) 布爾數(1或0)
RETURN_NULL() RETVAL_NULL() NULL
RETURN_DOUBLE(d) RETVAL_DOUBLE(d) 浮點數
RETURN_STRING(s, dup) RETVAL_STRING(s, dup) 字串。如果dup為1,引擎會調用estrdup()重複s,使用拷貝。如果dup為0,就使用s
RETURN_STRINGL(s, l, dup) RETVAL_STRINGL(s, l, dup) 長度為l的字串值。與上一個宏一樣,但因為s的長度被指定,所以速度更快。
RETURN_TRUE RETVAL_TRUE 返回布爾值true。注意到這個宏沒有括弧。
RETURN_FALSE RETVAL_FALSE 返回布爾值false。注意到這個宏沒有括弧。
RETURN_RESOURCE(r) RETVAL_RESOURCE(r) 資源控制代碼。



php -i | grep php.ini

1、 請具體敘述PHP的運行機制(細到多深看你心情, 呵);

PHP從下到上是一個4層體系:

  • Zend引擎:Zend整體用純C實現,是PHP的核心部分,它將PHP代碼翻譯(詞法、文法解析等一系列編譯過程)為可執行opcode的處理並實現相應的處理方法、實現了基本的資料結構(如hashtable、oo)、記憶體配置及管理、提供了相應的api方法供外部調用,是一切的核心,所有的外圍功能均圍繞Zend實現。
  • Extensions:圍繞著Zend引擎,extensions通過組件式的方式提供各種基礎服務,我們常見的各種內建函數(如array系列)、標準庫等都是通過extension來實現,使用者也可以根據需要實現自己的extension以達到功能擴充、效能最佳化等目的(如貼吧正在使用的PHP中介層、富文本解析就是extension的典型應用)。
  • Sapi:Sapi全稱是Server Application Programming Interface,也就是服務端應用編程介面,Sapi通過一系列鉤子函數,使得PHP可以和外圍互動資料,這是PHP非常優雅和成功的一個設計,通過sapi成功的將PHP本身和上層應用解耦隔離,PHP可以不再考慮如何針對不同應用進行相容,而應用本身也可以針對自己的特點實現不同的處理方式。
  • 上層應用:這就是我們平時編寫的PHP程式,通過不同的sapi方式得到各種各樣的應用模式,如通過webserver實現web應用、在命令列下以指令碼方式運行等等。

  • 著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.