Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Desenvolvendo sua primeira extensão em C para PHP

Desenvolvendo sua primeira extensão em C para PHP

Esta palestra visa elucidar o funcionamento de uma extensão C para PHP, ao mesmo tempo em que desenvolve um exemplo prático. Será abordada a criação de uma função específica, a base64_validate(), que implementa a validação de uma string base64 em C e disponibilizar para utilizar no PHP.

Este conteúdo foi elaborado para ser apresentado na PHP Conference Brasil 2023 e no IXCDevTalks, um evento interno promovido pela IXCSoft.

-----

This presentation aims to elucidate the operation of a C extension for PHP while simultaneously developing a practical example. The creation of a specific function, base64_validate(), will be addressed, which implements the validation of a base64 string in C and is made available for use in PHP.

This content has been prepared for presentation at the PHP Conference Brazil 2023 and IXCDevTalks, an internal event hosted by IXCSoft.

Marcos Marcolin

December 20, 2023
Tweet

More Decks by Marcos Marcolin

Other Decks in Programming

Transcript

  1. Marcos Marcolin • Engenheiro de Software • Aspirante a contribuidor

    OSS • Evangelista PHP • Fundador PHP Velho Oeste • Chapecó, SC
  2. Tópicos • O que são Extensões? ◦ Como elas funcionam?

    ◦ Por que criar extensões? • Escrevendo uma extensão em C para PHP ◦ Estrutura. ◦ Configurando o ambiente. ◦ Desenvolvendo uma extensão básica. ◦ Compilando, carregando e executando no PHP (:
  3. O que são extensões? • São módulos compilados que adicionam

    funcionalidades ao PHP e ampliam a capacidade da linguagem.
  4. O que são extensões? • São módulos compilados que adicionam

    funcionalidades ao PHP e ampliam a capacidade da linguagem.
  5. O que faz a Zend Engine? • Interpreta e executa

    um script PHP. • PHP 5.5 introduziu o OPcache.
  6. O que faz a Zend Engine? • Interpreta e executa

    um script PHP. • PHP 5.5 introduziu o OPcache. • PHP 8.0 introduziu o JIT.
  7. Tipos de extensões • Zend Extensions ◦ OPcache ◦ Xdebug

    ◦ phpdbg • php.ini ◦ zend_extension=extension.so
  8. Tipos de extensões • Zend Extensions ◦ OPcache ◦ Xdebug

    ◦ phpdbg • php.ini ◦ zend_extension=extension.so • PHP Extensions ◦ mysqli ◦ memcached ◦ mongodb • php.ini ◦ extension=module.so
  9. Tipos de extensões • Compiladas estaticamente ◦ standard ◦ json

    ◦ session • Fazem parte do núcleo do PHP • Não podem ser desabilitadas
  10. Tipos de extensões • Compiladas estaticamente ◦ standard ◦ json

    ◦ session • Fazem parte do núcleo do PHP • Não podem ser desabilitadas • Carregadas dinamicamente ◦ memcached ◦ curl ◦ swoole • Compilações individuais
  11. Por que criar extensões? • Adicionar novas funcionalidades a linguagem.

    • Desempenho. • Nem tudo pode ser feito na userland.
  12. O que elas fazem? • Adicionam Constantes, Classes ou Funções

    na userland. • Integram libs de terceiros. • Interagem com o PHP ou SO. • Etc.
  13. O que elas fazem? • Adicionam Constantes, Classes ou Funções

    na userland. • Integram libs de terceiros. • Interagem com o PHP ou SO. • Etc.
  14. Em que linguagem posso desenvolver? • C ou Clang •

    C++ ou CPlusPlus • Rust • Zephir • Alguma outra?
  15. O que são Macros? • Em C, uma macro é

    basicamente uma forma de criar atalhos ou substituições de código. Você pode definir uma macro usando #define. Quando você compila o programa, o compilador substitui todas as ocorrências da macro pelo código associado a ela.
  16. Estruturas de dados Zend • zval ◦ Principal estrutura de

    dados da linguagem e pode armazenar diferentes tipos de dados. • zend_string ◦ Armazenamento de strings: valor e comprimento. • zend_array ◦ Representa um array, bem como seu tamanho e referências. • zend_object ◦ Armazenamento de objetos e diversas informações sobre ele.
  17. base64_validate • Complementar as funções base64_encode e base64_decode • O

    que é base64? ◦ base64 é um método para codificação de dados para transferência na Internet. ◦ É constituído por 64 caracteres ([A-Z],[a-z],[0-9], "/" e "+") que deram origem ao seu nome. O carácter “=” é utilizado como um sufixo especial a especificação original. ◦ É Atualmente definida pela RFC 4648.
  18. Simples, né? • Mas, pode complicar: ◦ Documentação escassa. ◦

    Utilização de arrays com Hashtable. ◦ Ponteiros e ponteiros duplos. ◦ Gerenciamento de memória ▪ Memory leak(vazamento de memória) ▪ Zend Memory Manager ◦ Debugger ▪ Valgrind ◦ Compatibilidade com diferentes SO e processadores(instruções)
  19. Referências • php-src • PHP Internals Book • Zend -

    Writing PHP Extensions • Derick Rethans / Introduction to PHP Extensions • PHP UK Conference 2013 - Sara Golemon - PHP Extensions • Criando extensões para PHP 8 • marcosmarcolin / phpconfbr_2023