dev ext php

Download Dev Ext PHP

Post on 28-Nov-2014

682 views

Category:

Technology

0 download

Embed Size (px)

DESCRIPTION

Desenvolvendo Extensão para o PHP

TRANSCRIPT

  • 1. Desenvolvendo Extenses PECL PHP Conference Brasil 2010 26 de novembro Pedro Padron ppadron@w3p.com.br - @ppadron
  • 2. Hello World - php, pear, pecl, linux, plesk, puppet... - pecl.php.net/augeas - spamassassin php api - api api api api api api api api - wordpress
  • 3. Por que voc est aqui?(nesta sala, no no universo)
  • 4. pecl- php extension community library- dizem que se l pickle- ou no brasil: p (ou ) c le
  • 5. Motivos para criar uma extenso - performance - esconder o cdigo do cliente - acessar funes de uma biblioteca C - modificar o comportamento do PHP
  • 6. acessar funes de uma biblioteca em C "It is a glue language that glues the web server to all the interesting backend libraries available out there." * Rasmus Lerdorf* http://www.urgig.com/int/0107_rl_a_int.html
  • 7. modificar o comportamento do PHP funcall
  • 8. zend extensions - trabalham na camada da ZendEngine - bytecode compiler - opcode handlers - exemplos: xdebug, test_handlers, ZendGuardLoader
  • 9. zend extensions
  • 10. php extensions no faz nada do que uma zend extension faz
  • 11. montando o ambiente de trabalho
  • 12. montando o ambiente - linux- debian/ubuntu: apt-get install php5-dev (headers & phpize) apt-get build-dep php5 (libs necessrias) apt-get install php5-dbg (debug symbols)- redhat/fedora: yum install php5-dev yum install yum-utils yum-builddep php5
  • 13. montando o ambiente - windows - sim, possvel; sim, mais chato que no linux - visual c++ 2008 (express edition de graa) - microsoft platform sdk - vrias bibliotecas necessrias pelo PHP - variveis de ambiente no console do visual studio - processo completo: http://wiki.php.net/internals/windows/stepbystepbuild
  • 14. cdigo fonte do PHP - php.net/downloads - 5.3.3 - extraia p/ algum diretrio - em windows, no use caminhos que contenham espaos - cd php-src/ext
  • 15. compilando a extenso - linux $ cd ext/minhaextensao $ phpize $ ./configure $ make $ (sudo) make install extension=minhaextensao.so no php.ini
  • 16. compilando a extenso - windows- siga todos os passos da etapa de setup do ambiente- garanta que a extenso est no diretrio ext/- abra o Visual Studio Command Prompt> vcvars32.bat> buildconf> configure disable-all enable-minhaextensao=shared enable-cli> nmake- dentro de Release_TS estar php_minhaextensao.dll
  • 17. gerando o esqueleto de uma extenso
  • 18. gerando o esqueleto de uma extenso - to chato que foi preciso criar um script pra isso - php-src/ext/ext_skel - php-src/ext/ext_skel_win32.php * precisa de CygWin instalado * gera o arquivo .dsp do VisualStudio
  • 19. gerando o esqueleto de uma extenso ./ext_skel extname=minhaextensao .cvsignore (renomeie para .gitignore =P) config.m4 (config script linux) config.w32 (config script windows) CREDITS (seu nome e seu e-mail) EXPERIMENTAL (not for use in production) minhaextensao.c (cdigo da extenso) minhaextensao.php (script de teste) php_minhaextensao.h (headers) tests/001.phpt (primeiro teste)
  • 20. minhaextensao.c module entry essa estrutura vai armazenar todas as informaes sobre sua extenso
  • 21. minhaextensao.c - functions Sim, a ltima linha tem sempre que ser {NULL, NULL, NULL}, isso indica para a Zend Engine que a lista de funes acabou. Internamente, confirm_minha_extensao_compiled ser chamada de zif_confirm_minhaextensao_compiled. (zif = zend internal function)
  • 22. minhaextensao.c - functions E essa a funo!
  • 23. php_minhaextensao.hDeclarando as funes e a definio do mduloextern zend_module_entry minhaextensao_module_entry;PHP_MINIT_FUNCTION(minhaextensao);PHP_MSHUTDOWN_FUNCTION(minhaextensao);PHP_RINIT_FUNCTION(minhaextensao);PHP_RSHUTDOWN_FUNCTION(minhaextensao);PHP_MINFO_FUNCTION(minhaextensao);PHP_FUNCTION(confirm_minhaextensao_compiled);
  • 24. php_minhaextensao.h#ifdef ZTS#include "TSRM.h"#endif - ZTS = Zend Thread Safety - TSRM = Thread Safe Resource Manager
  • 25. config.m4 Se a sua extenso no usa nenhuma biblioteca externa:
  • 26. config.m4 Se a sua extenso usa alguma biblioteca externa
  • 27. config.m4 Testando a biblioteca pela presena de algum smbolo
  • 28. config.m4 smbolos de uma biblioteca so todos os elementos visveis ao seu usurio, podem ser classes, funes, estruturas de dados, etc...
  • 29. bibliotecas externas embutir ou linkar? - em windows prefervel embutir a biblioteca externa, pois o usurio final s precisa instalar sua dll (php_minhaextensao.dll) - em linux, verifique se as distribuies possuem pacotes para a biblioteca em questo; - se for embutir, verifique se a licena da biblioteca permite isso
  • 30. phpinfo(); - PHP_MINFO_FUNCTION
  • 31. phpinfo(); - PHP_MINFO_FUNCTION
  • 32. phpinfo(); - PHP_MINFO_FUNCTIONvoid php_info_print_table_start(void)void php_info_print_table_end(void)void php_info_print_table_header(int cols, ...)void php_info_print_table_colspan_header(int cols, char *header)void php_info_print_table_row(int cols, ...)void php_info_print_table_row_ex(int cols, char *class, ...)void php_info_print_box_start(int flag)void php_info_print_box_end()void php_info_print_hr(void)... no abuse da criatividade