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: 25.388 ]

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. - anjoel.s@ 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

Utilizando o Smarty template no PHP

Criando um sistema de banners rotativos em PHP

Utilizando PHP para validar dados passados pelo usuário

Como programar com OOP em PHP, uma classe simples

Criando sites para celular com WML

  
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

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts