Como eu posso compilar uma versão antiga do PHP e dependências no debian 8? (PHP 5.1.0 neste caso)

0

Eu gostaria de instalar uma versão muito antiga do PHP no debian 8. Ou seja, PHP 5.1.0. Eu vou não usar isso na produção, é apenas para fins de teste. No entanto, se eu tentar compilá-lo, me deparo com problemas com o módulo dom. Depois de um pouco de pesquisa descobri que libxml2 versões > = 2.9 causam problemas com as versões mais antigas do PHP. Agora eu gostaria de saber se é possível compilar o libxml2 2.8, salvá-lo em algum lugar e usá-lo para compilar o php 5.1. Se for possível, você pode me dizer como?

    
por Samuel Mo 07.08.2016 / 15:23

1 resposta

0

Você definitivamente pode fazer isso, mas pode ficar chato. Eu colocaria o libxml 2.8 em um prefixo separado ( ./configure --prefix=/path/to/prefix/ ) juntamente com o PHP 5.1.0 (por exemplo, /opt/php510/ ou /usr/local/php510/ ), já que você não quer arriscar a substituição da biblioteca mais nova por uma mais antiga. Você definitivamente seria melhor se você construísse a libxml 2.8 estaticamente, então ela é incluída no PHP e você pode evitar o 'inferno da biblioteca compartilhada' ao iniciar o programa. Normalmente, isso seria feito adicionando --disable-shared --enable-static aos sinalizadores de configuração.

Então, no final do PHP, você teria que configurá-lo para usar o mesmo prefixo, e também adicionar os caminhos da biblioteca libxml 2.8 à sua invocação do GCC. Se ele usar autoconf para construir ( ./configure scripts geralmente são autoconf gerados), você gostaria de executar algo como CFLAGS=-I/opt/php510/include LDFLAGS=-L/opt/php510/lib ./configure --prefix=/opt/php510 .

  • CFLAGS é uma variável que contém argumentos passados para o gcc ao criar arquivos de objeto .o . -I/path diz ao GCC para procurar cabeçalhos ("includes" ou .h files) em /path in antes de procurar na lista padrão (normalmente /usr/include e /include IIRC).
  • LDFLAGS é uma variável que contém argumentos passados para o vinculador (normalmente ld , embora também seja possível usar gcc como um vinculador para combinar .o arquivos em um programa executável. O autoconf respeita essa variável em ambos usos). -L/path diz ao vinculador para procurar por arquivos de biblioteca (estático .a files ou objeto compartilhado .so files) em /path .

Se você vincular a libxml 2.8 como uma biblioteca compartilhada, receberá um erro como libxml.so.2.8 not found , pois /etc/ld.so.conf não foi solicitado a procurar por bibliotecas compartilhadas em /opt/php510/lib . É por isso que recomendo usar uma versão vinculada estaticamente.

Se você tiver algum problema ao fazer isso ou se algo estiver usando um sistema de criação diferente, avise-me.

Você também pode consertar o PHP para usar as versões libxml > = 2.9 de quaisquer funções que estejam causando problemas, embora seja difícil encontrar antigos avisos de descontinuidade para funções já removidas.

    
por 07.08.2016 / 21:23