Criando extensões para PHP 8 - Parte 01

Estou começando à reescrever a extensão PHP-GTK novamente (novamente por que é a terceira vez). Depois de aprender muito sobre as dificuldades e ter seguido o caminho mais curto, aprendi bastante sobre escolha de ferramentas e libs dependentes. Todo um universo foi criado em torno do PHP-GTK 3, mas houve dificuldades na compilação para Windows, como digo em outras postagens, esse foi o ponto do fracasso. Já que a extensão será reescrita, aproveitei para me aprofundar nas mudanças do PHP 8 e já utilizar GTK 4.

 

o primeiro post foi perdido, infelizmente ao salvar o segundo, deu chabu e eu fui juvenil. Então vou resumir de forma bem sucinta o que tinha no post original

Quero começar esse post, explicando que a primeira versão foi perdida, então vou ser bem direto do na forma de começar uma extensão.

Essa séria vai ser escrita, para minha referencia, e para outros que tenham dificuldade em conseguir entender o funcionamento de desenvolvimento de extensões PHP, pois a documentação é quase se inexistente e descentralizada, precisando muitas vezes recorrer à códigos fonte ou converter para versões mais novas.

Outra coisa importante, é toda essa documentação é baseada em Linux, mas isso não vai influenciar no seu desenvolvimento caso use Windows ou Mac, pois depois do ambiente configurado, tudo passa a ser igual.

Então primeira coisa é baixar as dependências e compilar o PHP. Mas vou pressupor que você ja tenha o PHP compilado. Caso não queira compilar o PHP, se atente à baixar a versão correspondente do source do PHP
$ sudo apt-get install build-essential autoconf libtool bison re2c php-dev php-cli git
Com as dependências instaladas, vamos baixar o fonte do php. Se atende ao branch da versão correta:
$ git clone -b PHP-7.4.2 https://github.com/php/php-src.git
$ cd php-src
Com o fonte pronto, temos uma forma inicial de criar uma extensão esqueleto, usando o ext/ext_skel.php. Você precisa passar o nome da extensão e onde ele vai ser criado
ext/ext_skel.php --ext myExt --dir ../
Esse esqueleto criará os seguintes arquivos:
  • config.m4 e config.w32: Estes são arquivos de script que ajudarão a criar o configure usando phpize ou bildconfig;
  • php_myext.h: Arquivo header da sua extensão;
  • myext.c: É o arquivo C que implementa sua extensão. Nele que você fará as configurações gerais e registrar os ganchos;
Para compilar sua extensão, precisamos criar o arquivo de configuração. Para isso usamos o phpize dentro do diretório da nossa extensão:
$ phpize
Agora você ja consegue configurar e compilar
$ ./configure
$ make
Caso você esteja compilando em uma versão diferente da instalada, você deve passar o parâmetro --with-php-config=/opt/php8/bin/php-config no ./configure, para que o script identifique onde está os headers corretos da versão

Sua extensão será salva em module modules/myext.so. Para executar e testar sua extensão, você não precisa instalar e mexer nos arquivos ini. Basta executar por linha de comando, algo como:
$ php -d extension=./modules/myext.so -m
[PHP Modules]
Core
date
hash
json
myext
pcre
Reflection
SPL
standard

[Zend Modules]
Pronto, olha lá sua extensão carregadinha junto com o PHP.

No próximo post quero escrever mais sobre a estrutura de carregamento e inicialização da extensão.

Pessoal, gostaria de deixar um apelo ai para darem uma força. compartilhem, comentem, deixe seu comentário no post. quem escreve ou
faz vídeo, muitas vezes nem faz isso por dinheiro, mas sim para
engajar a comunidade de alguma forma. não gostou da forma que eu
escrevo? comenta na boa (nem eu gosto também), mas comenta algo, manda
pro brodi, bora crescer e centralizar um conteúdo de qualidade

Gostaria de novamente pedir desculpas por ter que reescrever e ter sido tão corrido dessa vez, mas não podia deixar sem o conteúdo, Prometo que prestarei mais atenção nas próximas vezes

Referencias: https://www.zend.com/resources/writing-php-extensions, http://www.phpinternalsbook.com/index.html