[PHP] Desarrollo de
extensiones en c/c++
CODEMOTION Madrid 2013
Un poquito de SPAM
Un poquito de SPAM
Daniel González
@desarrolla2
Un poquito de SPAM

@phpmad
Objetivo
Objetivo
Introducción
teórica
Desarrollo de extensiones en C/C++
¿Que es PHP?
“PHP is a serverside scripting
language designed
for web
development but
also used as a
general-purpose
progr...
¿Que es una extensión?
“An extension in PHP is in
fact a module providing
some functionality to the
PHP Engine.” - Shahar
...
¿Para que extender PHP?
¿Para que extender PHP?
¿Para que extender PHP?
¿Por que no hacerlo?
¿Por que no hacerlo?

“spaPHPetti code”
¿Por que no hacerlo?
¿Por que no hacerlo?
¿Por que no hacerlo?
¿Por que no hacerlo?
strtoupper
PHP_FUNCTION(strtoupper)
{
char *arg;
int arglen;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &ar...
strtoupper
PHPAPI char *php_strtoupper(char *s, size_t len)
{
unsigned char *c, *e;
c = (unsigned char *)s;
e = (unsigned ...
strtoupper
<?php
echo "Testing strtoupper: ";
$test = "abCdEfg";
$upper = strtoupper($test);
if ($upper == "ABCDEFG") {
ec...
strtoupper
--TEST-Test strtoupper on non-ASCII characters
--SKIPIF-<?php
if (!setlocale(LC_CTYPE, "de_DE", "de", "german",...
¿Por que no hacerlo?
github.com/php/php-src
repositorio git desde 1999
140 committers
50,000 commits
~ 10 committers / año
¿Por que no hacerlo?
github.com/symfony/symfony
repositorio git desde 2010
770 committers
15,000 commits
~ 250 committers ...
¿Por que no hacerlo?
¿Que necesito?
código fuente de php
entorno de compilación
conocimientos de c/c++
conocimientos de php ( bajo el capó )
Bajo el capó
Application ( apache, cli, nginx, php-fpm )

SAPI

PHP API
PHP Core
Extensions

Zend API

Zend Extension API
...
Bajo el capó
SAPI Startup

PHP Startup

Engine
Init

Module Initialization and configuration

MINIT
Signals

Sandboxing

F...
Bajo el capó

PHP Code

LEXER

Expressions

PARSER /
COMPILER

OP Code
Ejemplos
prácticos
Desarrollo de extensiones en C/C++
RelaxingCup();
Desarrollo de extensiones en C/C++
PrimeNumbers
->factorize(1000,10000);
Desarrollo de extensiones en C/C++
afile_put_contents();
Desarrollo de extensiones en C/C++
afile_put_contents
Module Initialization and configuration

Child

Exit

MINIT
Signals

fopen

RINIT
Signals

RSHUTD
OWN

...
Para terminar ...
Desarrollo de extensiones en C/C++
Conclusiones
Referencias

https://wiki.php.net/internals/references
¿Preguntas?
Desarrollo de extensiones en C/C++
¡Gracias!
Desarrollo de extensiones en C/C++
Upcoming SlideShare
Loading in...5
×

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

574

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
574
On Slideshare
0
From Embeds
0
Number of Embeds
12
Actions
Shares
0
Downloads
11
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++
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×