3. build your own php extension ai ti aptech

27
Build your own PHP Extension Hanoi PHP Day 2010 Bui Dinh Ngoc AiTi-Aptech - CAH Trường đào tạo Lập trình viên Quốc tế AiTi-Aptech

description

 

Transcript of 3. build your own php extension ai ti aptech

Page 1: 3. build your own php extension   ai ti aptech

Build your own PHP Extension

Hanoi PHP Day 2010                    

Bui Dinh NgocAiTi-Aptech - CAH

Trường đào tạo Lập trình viên Quốc tế AiTi-Aptech

Page 2: 3. build your own php extension   ai ti aptech

PHP Extension ?

Page 3: 3. build your own php extension   ai ti aptech

PHP Extension

• You've used extensions ?• php_mysql , gd , pdo , curl ,  ...•  

Page 4: 3. build your own php extension   ai ti aptech

PHP Extension (Zend Engine)• PHP language  written in  C • PHP interpreter written in  C too• And PHP Extension must   written in  C• Another PHP implement may be using diffrence language

Page 5: 3. build your own php extension   ai ti aptech

Why and When need PHP extension ?1. Buildin PHP function are not enough 2. Existing PHP extension are not enough 3. Pure PHP function are more slow4. Have C lib can do this for you

Page 6: 3. build your own php extension   ai ti aptech

Prepare 

1. Ubuntu Linux 2. GNU C Compiler , build , make utils  3.  PHP 5 Dev package : sudo apt-get install php5-dev4. PHP source code 

o sudo svn checkout  http://svn.php.net/viewvc/php/php-src/trunk

o  

Page 7: 3. build your own php extension   ai ti aptech

PHP-Src-5.3 tree directory

 

Page 8: 3. build your own php extension   ai ti aptech

ext_skel.sh script

 

Page 9: 3. build your own php extension   ai ti aptech

Write Hello World Extension//Example function call <?php

function hello_world() {    return 'Hello World';}

?>

Page 10: 3. build your own php extension   ai ti aptech

 

1. Run ext_skel script : sudo ./ext_skel –extname=hello2.  

Page 11: 3. build your own php extension   ai ti aptech

Result

 

Page 12: 3. build your own php extension   ai ti aptech

phpize

The phpize command is used to prepare the build environment for a PHP extension.  

Page 13: 3. build your own php extension   ai ti aptech

 

 

Page 14: 3. build your own php extension   ai ti aptech

Edit header file php_hello.h

Page 15: 3. build your own php extension   ai ti aptech

Insert your function to header filePHP_FUNCTION(hello);  /*My function here*/

Page 16: 3. build your own php extension   ai ti aptech

Edit C source file - pre declareconst zend_function_entry simhash_functions[] = {PHP_FE(confirm_hello_compiled,    NULL)        /* For testing, remove later. */PHP_FE(hello, NULL){NULL, NULL, NULL}    /* Must be the last line in hello_functions[] */};

Page 17: 3. build your own php extension   ai ti aptech

Implement function

PHP_FUNCTION(hello){php_printf(“Hello, world!\n”);}

Page 18: 3. build your own php extension   ai ti aptech

Build - Run some script

1. sudo ./configure2. sudo make3. ls modules -> hello.so

Page 19: 3. build your own php extension   ai ti aptech

Test

1. Deploy file hello.so2. Check new extension is loaded by phpinfo function 3. You also can test using existed hello.php script in ext dir

Page 20: 3. build your own php extension   ai ti aptech

Advance !

1. Build php function with parameter2. Return value3. Memory allocation 4. Anti Memory leak5. Array6. String7. Global variable8. PHP.INI variable9. ........

Page 21: 3. build your own php extension   ai ti aptech

Function with parameter

function hello_add($a, $b) {

    $sum = (int)$a + (float)$b;

    return $sum;}

Page 22: 3. build your own php extension   ai ti aptech

Function with parameter

PHP_FUNCTION(hello_add){    long a;    double b; 

    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ld", &a, &b) == FAILURE) {        RETURN_NULL();    }

            RETURN_DOUBLE(a + b);    }

Page 23: 3. build your own php extension   ai ti aptech

Return value

1. bool2. int3. double4. resource5. array6. object

Only 6 return type

Page 24: 3. build your own php extension   ai ti aptech

Return value (macro)

RETURN_LONG() for integer valuesRETURN_DOUBLE() for floating point valuesRETURN_BOOL() for true/false valuesRETURN_NULL() for null value.....  

Page 25: 3. build your own php extension   ai ti aptech

Memory allocation

 

Page 26: 3. build your own php extension   ai ti aptech

Anti Memory leak

• In C, memory management always very hard  .• Wrapper functions provides you with a safety net and some

helpful debugging facilities• But convert existing C source can't use wrapper functions

 

Page 27: 3. build your own php extension   ai ti aptech

Reference

1. http://i-php.net/2010/10/t-build-extension-cho-php/2. http://devzone.zend.com/article/10213. "Programming PHP" by Rasmus Lerdorf and Kevin