codemotion madrid 2013 - [php] desarrollo de extensiones en c c++

39
[PHP] Desarrollo de extensiones en c/c++ CODEMOTION Madrid 2013

Upload: daniel-gonzalez

Post on 13-Dec-2014

420 views

Category:

Technology


2 download

DESCRIPTION

¿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

TRANSCRIPT

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

[PHP] Desarrollo de extensiones en c/c++CODEMOTION Madrid 2013

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

Un poquito de SPAM

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

Un poquito de SPAM

Daniel González@desarrolla2

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

Un poquito de SPAM

@phpmad

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

Objetivo

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

Objetivo

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

Introducción teóricaDesarrollo de extensiones en C/C++

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

¿Que es PHP?

“PHP is a server-side scripting language designed for web development but also used as a general-purpose programming language”. -wikipedia

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

¿Que es una extensión?

“An extension in PHP is in fact a module providing some functionality to the PHP Engine.” - Shahar Evron

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

¿Para que extender PHP?

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

¿Para que extender PHP?

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

¿Para que extender PHP?

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

¿Por que no hacerlo?

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

¿Por que no hacerlo?

“spaPHPetti code”

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

¿Por que no hacerlo?

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

¿Por que no hacerlo?

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

¿Por que no hacerlo?

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

¿Por que no hacerlo?

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

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);}

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

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;}

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

strtoupper

<?phpecho "Testing strtoupper: ";$test = "abCdEfg";$upper = strtoupper($test);if ($upper == "ABCDEFG") { echo("passed\n");} else { echo("failed!\n");}?>

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

strtoupper

--TEST--Test strtoupper on non-ASCII characters--SKIPIF--<?phpif (!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--

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

¿Por que no hacerlo?

github.com/php/php-srcrepositorio git desde 1999140 committers50,000 commits ~ 10 committers / año

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

¿Por que no hacerlo?

github.com/symfony/symfonyrepositorio git desde 2010770 committers15,000 commits ~ 250 committers / año

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

¿Por que no hacerlo?

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

¿Que necesito?

código fuente de phpentorno de compilaciónconocimientos de c/c++conocimientos de php ( bajo el capó )

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

Bajo el capó

Zend Engine

Zend Extension APIZend API

PHP Core

Extensions

PHP API

SAPI

Application ( apache, cli, nginx, php-fpm )

PHP Architecture

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

Bajo el capó

PHP Startup

Module Initialization and configuration

Child

Exit

Fork Child

Exit

Fork

SAPI Startup

MINIT Signals

RINIT Signals

RSHUTDOWN

Engine Init

Sandboxing

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

Bajo el capó

PHP Code LEXER Expressions PARSER /COMPILER OP Code

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

Ejemplos prácticosDesarrollo de extensiones en C/C++

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

RelaxingCup();Desarrollo de extensiones en C/C++

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

PrimeNumbers->factorize(1000,10000);Desarrollo de extensiones en C/C++

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

afile_put_contents();Desarrollo de extensiones en C/C++

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

afile_put_contents

Exit

ChildRINIT

Signals

Module Initialization and configurationMINIT

Signals fopen

fwritefclose

RSHUTDOWN

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

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

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

Conclusiones

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

Referencias

https://wiki.php.net/internals/references

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

¿Preguntas?Desarrollo de extensiones en C/C++

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

¡Gracias!Desarrollo de extensiones en C/C++