Build your own PHP extension

  • 2,736 views
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,736
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
38
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 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
  • 2. PHP Extension ?
  • 3. PHP Extension
      • You've used extensions ?
      • php_mysql , gd , pdo , curl ,  ...
      •  
  • 4. 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
  • 5. Why and When need  PHP extension ?
      • Buildin PHP function are not enough 
      • Existing PHP extension are not enough
      • Pure PHP function are more slow
      • Have C lib can do this for you
  • 6. Prepare 
      • Ubuntu Linux 
      • GNU C Compiler , build , make utils 
      •   PHP 5 Dev package : sudo apt-get install php5-dev
      • PHP source code 
        • sudo svn checkout  http://svn.php.net/viewvc/php/php-src/trunk
        •  
  • 7. PHP-Src-5.3 tree directory
    •  
  • 8. ext_skel.sh script
    •  
  • 9. Write Hello World  Extension
    • //Example function call
    • <?php function hello_world () {     return 'Hello World' ; } ?>
  • 10.  
      • Run ext_skel script : sudo ./ext_skel –extname=hello
      •  
  • 11. Result
    •  
  • 12. phpize
    • The phpize command is used to prepare the build environment for a PHP extension.
    •  
    •  
  • 13.  
    •  
  • 14. Edit header file php_hello.h
  • 15. Insert your function  to header file
    • PHP_FUNCTION(hello);  /*My function here*/
  • 16. Edit C source file  - pre declare
    • const 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[] */ };
  • 17. Implement function
    • PHP_FUNCTION(hello) { php_printf(“Hello, world!n”); }
  • 18. Build - Run some script
      • sudo ./configure
      • sudo make
      • ls modules -> hello.so
  • 19. Test
      • Deploy file hello.so
      • Check new extension is loaded by phpinfo function 
      • You also can test using existed hello.php script in ext dir
  • 20. Advance !
      • Build php function with parameter
      • Return value
      • Memory allocation 
      • Anti Memory leak
      • Array
      • String
      • Global variable
      • PHP.INI variable
      • ........
  • 21. Function with parameter
    • function hello_add ( $a , $b ) {      $sum = (int) $a + (float) $b ;     return $sum ; }
  • 22. Function with parameter
    • PHP_FUNCTION(hello_add) {     long a;     double b;      if ( zend_parse_parameters (ZEND_NUM_ARGS() TSRMLS_CC, &quot; ld&quot;, &a, &b ) == FAILURE) {         RETURN_NULL();     }             RETURN_DOUBLE(a + b);     }
  • 23. Return value
      • bool
      • int
      • double
      • resource
      • array
      • object
    Only 6 return type
  • 24. Return value (macro)
    • RETURN_LONG() for integer values
    • RETURN_DOUBLE() for floating point values
    • RETURN_BOOL() for true/false values
    • RETURN_NULL() for null value
    • .....
    •  
  • 25. Memory allocation
    •  
  • 26. 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
    •  
  • 27. Reference
      • http://i-php.net/2010/10/t-build-extension-cho-php/
      • http://devzone.zend.com/article/1021
      • &quot;Programming PHP&quot; by Rasmus Lerdorf and Kevin 
    •