Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++

1,015 views

Published on

¿Que es PHP? “PHP is a serverside scripting language designed for web development but also used as a general-purpose programming language”. -wikipedia
9. ¿Que es una extensión? “An extension in PHP is in fact a module providing some functionality to the PHP Engine.” - Shahar Evron

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,015
On SlideShare
0
From Embeds
0
Number of Embeds
362
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Codemotion Madrid 2013 - [PHP] desarrollo de extensiones en c c++

  1. 1. [PHP] Desarrollo de extensiones en c/c++ CODEMOTION Madrid 2013
  2. 2. Un poquito de SPAM
  3. 3. Un poquito de SPAM Daniel González @desarrolla2
  4. 4. Un poquito de SPAM @phpmad
  5. 5. Objetivo
  6. 6. Objetivo
  7. 7. Introducción teórica Desarrollo de extensiones en C/C++
  8. 8. ¿Que es PHP? “PHP is a serverside scripting language designed for web development but also used as a general-purpose programming language”. -wikipedia
  9. 9. ¿Que es una extensión? “An extension in PHP is in fact a module providing some functionality to the PHP Engine.” - Shahar Evron
  10. 10. ¿Para que extender PHP?
  11. 11. ¿Para que extender PHP?
  12. 12. ¿Para que extender PHP?
  13. 13. ¿Por que no hacerlo?
  14. 14. ¿Por que no hacerlo? “spaPHPetti code”
  15. 15. ¿Por que no hacerlo?
  16. 16. ¿Por que no hacerlo?
  17. 17. ¿Por que no hacerlo?
  18. 18. ¿Por que no hacerlo?
  19. 19. strtoupper PHP_FUNCTION(strtoupper) { char *arg; int arglen; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arglen) == FAILURE) { return; } arg = estrndup(arg, arglen); php_strtoupper(arg, arglen); RETURN_STRINGL(arg, arglen, 0); }
  20. 20. strtoupper PHPAPI char *php_strtoupper(char *s, size_t len) { unsigned char *c, *e; c = (unsigned char *)s; e = (unsigned char *)c+len; while (c < e) { *c = toupper(*c); c++; } return s; }
  21. 21. strtoupper <?php echo "Testing strtoupper: "; $test = "abCdEfg"; $upper = strtoupper($test); if ($upper == "ABCDEFG") { echo("passedn"); } else { echo("failed!n"); } ?>
  22. 22. strtoupper --TEST-Test strtoupper on non-ASCII characters --SKIPIF-<?php if (!setlocale(LC_CTYPE, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1")) { die("skip locale needed for this test is not supported on this platform"); } ?> --FILE-<?php $chars = "�"; // Not sure which is most portable. BSD's answer to this one. A small array based on PHP_OS should // cover a majority of systems and makes the problem of locales transparent for the end user. setlocale(LC_CTYPE, "de_DE", "de", "german", "ge", "de_DE.ISO8859-1", "ISO8859-1"); echo strtoupper($chars)."n"; ?> --EXPECT--
  23. 23. ¿Por que no hacerlo? github.com/php/php-src repositorio git desde 1999 140 committers 50,000 commits ~ 10 committers / año
  24. 24. ¿Por que no hacerlo? github.com/symfony/symfony repositorio git desde 2010 770 committers 15,000 commits ~ 250 committers / año
  25. 25. ¿Por que no hacerlo?
  26. 26. ¿Que necesito? código fuente de php entorno de compilación conocimientos de c/c++ conocimientos de php ( bajo el capó )
  27. 27. Bajo el capó Application ( apache, cli, nginx, php-fpm ) SAPI PHP API PHP Core Extensions Zend API Zend Extension API Zend Engine PHP Architecture
  28. 28. Bajo el capó SAPI Startup PHP Startup Engine Init Module Initialization and configuration MINIT Signals Sandboxing Fork Child Exit Fork Child Exit RINIT Signals RSHUTD OWN
  29. 29. Bajo el capó PHP Code LEXER Expressions PARSER / COMPILER OP Code
  30. 30. Ejemplos prácticos Desarrollo de extensiones en C/C++
  31. 31. RelaxingCup(); Desarrollo de extensiones en C/C++
  32. 32. PrimeNumbers ->factorize(1000,10000); Desarrollo de extensiones en C/C++
  33. 33. afile_put_contents(); Desarrollo de extensiones en C/C++
  34. 34. afile_put_contents Module Initialization and configuration Child Exit MINIT Signals fopen RINIT Signals RSHUTD OWN fwrite fclose
  35. 35. Para terminar ... Desarrollo de extensiones en C/C++
  36. 36. Conclusiones
  37. 37. Referencias https://wiki.php.net/internals/references
  38. 38. ¿Preguntas? Desarrollo de extensiones en C/C++
  39. 39. ¡Gracias! Desarrollo de extensiones en C/C++

×