PHP 5 - Compilando com as melhores práticas com PHP 4

Este artigo tem por objetivo mostrar-lhes a compilação do PHP 5 para obter melhor desempenho mantendo o core limpo de módulos, apenas os básicos, e dispondo os demais como módulos dinamicamente carregados. Também poderá ser usado para manter PHP 4 e PHP 5 num mesmo sistema. Os procedimentos foram testados no Slackware para manter duas versões de PHP (4 e 5), mas são facilmente ajustáveis para qualquer outra necessidade.

[ Hits: 23.450 ]

Por: Anderson J. de Souza em 27/08/2008 | Blog: http://anderjs.blogspot.com/


Criando pacote para Slackware



Os passos para criar o pacote para Slackware -- ajuste como quiser -- são:

1. Extraia o conteúdo do código-fonte do PHP 5;

2. Entre no diretório do código-fonte;

3. Coloque o arquivo da página 2 no diretório;

Execute:

`sed -r 's/#.*$//g' README.aj | tr '\n' ' '`

Execute:

sed -i -r 's/^([[:space:]]*C(XX|PP)?FLAGS[[:space:]]*=.*)$/\1 -mcpu=i686 -march=i686 -pipe/g' Makefile

4. Execute:

make

5. Se quiser, execute:

make test

6. Crie o diretório de instalação:

mkdir -p /tmp/php5

7. O "make install" tem um problema, precisa do arquivo httpd.conf com uma linha de LoadModule, então vamos criar um pra ele. Depois você deve apagar este arquivo:

echo 'LoadModule rewrite_module libexec/apache/mod_rewrite.so' >> /tmp/php5/etc/apache/httpd.conf
# make INSTALL_ROOT=/tmp/php5 install


8. Crie o diretório da documentação:

# mkdir -p /tmp/php5/usr/local/share/doc/php-5.2.6-aj

9. Copie a documentação. Perceba que o README.aj está indo junto:

# cp C* EXTENSIONS INSTALL LICENSE README.* TODO* NEWS /tmp/php5/usr/local/share/doc/php-5.2.6-aj

10. Crie o diretório de instalação do pacote:

# mkdir -p /tmp/php5/install

11. Crie o arquivo de descrição. Eu utilizei o do pacote original e descrevi as alterações que fiz e a utilização proposta;

12. Crie o arquivo de instalação doinst.sh. Se quiser, utilize o script abaixo, é o que utilizo;

13. Entre no diretório da instalação criado:

# cd /tmp/php5

14. Finalmente, crie o pacote:

# makepkg -l n -c y php-5.2.6-i686-1_slack10.2_aj.tgz

Abaixo está meu arquivo doinst.sh, que é executado quando você faz o installpkg.

#!/bin/sh
#
# Configura Apache para utilizar PHP 5 ou cria arquivo alternativo
#
# By Anderson J. S. - [email protected] gmail.com
# At OmegaTecnologia.com
#
# Created on 2008.08.20
#

## Analisa versão do Apache instalada

[ "`httpd -v | grep -i 'apache/1.3'`" ] || {
        echo "Este pacote é para ser utilizado apenas com Apache 1.3";
        echo "Instale o servidor HTTP solicitado ou recompile este programa conforme as informações em:";
        echo "\t /usr/local/share/doc/php-5.2.6-aj/README.aj";
        exit 1;
}

## Encontra arquivo de configuração
httpd=`whereis -b httpd | cut -d' ' -f2`
[ "$httpd" ] && {
        conf=`$httpd -V | grep SERVER_CONFIG_FILE | cut -d'"' -f2`;
        prefix=`$httpd -V | grep HTTPD_ROOT | cut -d'"' -f2`;
} || {
        conf=`find /etc /usr/local/etc -name httpd.conf`;
}

## Valida a existência do httpd.conf
[ "$conf" ] || {
        echo "Arquivo httpd.conf não encontrado.";
        echo "Para uma instalação bem sucedida, tenha o arquivo em /etc ou /usr/local/etc ou";
        echo "o programa httpd em seu PATH apontando para um arquivo httpd.conf válido.";
        exit 2;
}

#conf='etc/apache/httpd.conf';

# Gera lista de arquivos para ajustar o módulo
files="`echo $conf && grep -E '^[[:space:]]*Include[[:space:]]' ${conf} | awk '{print $2}'`";

## Procura por LoadModule php e outros LoadModule's
lmod='[[:space:]]*LoadModule[[:space:]]+';
amod='[[:space:]]*AddModule[[:space:]]+mod_'; #php4.c';
php='php[0-9]_module[[:space:]]+';
php5='php5_module[[:space:]]+';
clear="[[:space:]]*ClearModuleList[[:space:]]*";
#libER="\/usr\/libexec\/apache\/libphp5.so";
lib="/usr/libexec/apache/libphp5.so";
lib=${lib#$prefix/}
line="LoadModule php5_module        $lib";
for f in "$files" ; do
        grep -E "^$lmod$php" $f >> /dev/null && isphp="$f $isphp" ||
               grep -E "^$lmod" $f >> /dev/null && ismod=$f
#               grep -E "^$clear" $f >> /dev/null && isclear=$f
done;

## Configura o httpd.conf ou Include
if [ "$isphp" ] ; then
        ## se encontrou módulos do php arrumar as instancias
        for i in $isphp ; do
                i="`echo $i | awk '{print \$1}'`"
                if grep -E "^$lmod$php5" $i >> /dev/null ; then
                        ## se for php5 reescrever para garantir a localização do módulo
                        sed -i -r "s/^($lmod$php5)[^#]*(#.*)?/\\1 ${lib//\//\\/} \2/g" $i
                elif grep -E "^$lmod$php" $i >> /dev/null ; then
                        ## caso contrario se tiver módulo phpX gera arquivo para php5
                        sed -r -e "s/^($lmod)$php[^#]*(#.*)?/\\1php5_module ${lib//\//\\/} /g" \
                                -e "s/^($amod)php[0-9][.]c[^#]*(#.*)?/\\1php5.c/g" \
                                $i > $i.php5
                fi;
        done;
elif [  "$ismod" ] ; then
        ## Se achou apenas cargas de módulos, colocar php5 junto
        sed -i -r "/^$lmod/a$line" $f
else
        ## Se não achou referência, carregar módulo no httpd.conf
        echo $line >> $conf ;
fi;

## Segurança anti-injection
exit ;
## Segurança anti-injection

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Manual, informações ou pré-script
   3. Otimização do GCC
   4. Criando pacote para Slackware
   5. Arquivo de configuração do PHP 5
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Symfony Framework - Introdução

Criando Virtual Host no Apache: simples assim

Inteligência Artificial com PHP e MySQL (parte I)

Instalando Lamp Stack no Servidor Debian

Tags automáticas em URLs com a classe urlmatch da PHP

  
Comentários
[1] Comentário enviado por ajsouza em 08/09/2008 - 10:33h

pessoal ,.. faltou uma coisa que pode ajudar,... no comando de compilação vocês podem adicionar um --with-pear


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts