?
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
源碼包執行
-
./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應用、在命令列下以指令碼方式運行等等。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。