A instalação deste PHP foi configurada com algumas opções interessantes, como suporte à Dtrace, Pthreads etc. Ao final estão algumas explicações sobre algumas opções da configuração. Caso queira se aprofundar em cada uma delas, pesquise.
Pare o Apache:
# apache2 stop
Às vezes é preciso dar um refresh na página para verificar se o Apache parou mesmo, principalmente quando se está acessando em rede de uma máquina remota.
Instalando o PEAR:
# aptitude install php-pear
Instalando os pacotes necessários para a configuração de alguns módulos do PHP 8.
# aptitude install systemtap-sdt-dev
# aptitude install libicu-dev libmcrypt-dev
# aptitude install libpcre3 libpcre3-devpcre
# aptitude install libxml2 libxml2-dev libxslt1.1 libxslt1-dev
# aptitude install libjpeg62-turbo-dev libpng-dev
# aptitude install libonig-dev libzip-dev
A partir do PHP 7.4.0 a libsqlite precisa ser maior ou igual a versão 3.7.4. Anteriormente, a libsqlite empacotada poderia ser usada em seu lugar. Tanto o Stretch quanto o Buster com o apt-get ou o aptitude ou o apt baixam versões menores do que a 3.7.4 que, aliás, mudou de número segundo o site da SQlite.
A SQlite permite o uso do PHP PDO e vem habilitada por padrão no PHP8 e porque vamos habilitar o PHP PDO na instalação precisamos da SQlite ou então não se habilita o uso do PHP PDO e coloca-se nas configurações --without-sqlite3 (sem sqlite3).
# cd /usr/src/
# mkdir sqlite3 && cd sqlite3
# wget -c https://sqlite.org/2021/sqlite-autoconf-3360000.tar.gz -O sqlite.tar.gz
# tar xvfz sqlite.tar.gz
# cd sqlite-autoconf-*/
# ./configure
# make
# make install
# cd
Criando o diretório de instalação do PHP:
# mkdir /opt/php8
Estando dentro de /usr/src, faça o download da última versão do PHP 8:
# cd /usr/src
# wget -O php-8.0.9.tar.gz http://php.net/get/php-8.0.9.tar.gz/from/this/mirror
# tar -xzvf php-8.0.9.tar.gz
# cd php-8.0.9
Para ver as opções de configurações, se quiser:
# ./configure --help
Configurando:
# ./configure --prefix=/opt/php8 --exec-prefix=/opt/php8 --enable-mbstring --enable-ftp --enable-exif --enable-pcntl --enable-intl --enable-opcache --enable-pdo --enable-debug --enable-dtrace --enable-xml --enable-cgi --enable-cli --enable-shared --with-apxs2=/opt/apache2/bin/apxs --with-pgsql=/usr --with-pdo-pgsql=/usr --with-xsl=/usr --with-zlib-dir=/usr --with-external-pcre --with-jpeg --with-zip --with-pear=/usr
Deverá terminar sem nenhuma mensagem de erro antes de:
Thank you for using PHP.
Em caso de erro, execute make clean, analise a mensagem, corrija e repita o ./configure.
Caso seja necessário, exclua a pasta php-8.0.9 e descompacte o arquivo php-8.0.9.tar.gz de novo e repita a partir do ./configure.
Construindo:
# make
Aguarde terminar, demora uns minutos.
Build complete.
Don't forget to run 'make test'.
Testando:
# make test
Isso demora um pouco.
Dará PASS (em verde) e SKIP (em amarelo).
Caso der a mensagem de FAILED TEST SUMMARY ao final, ignore e siga em frente.
Terminará:
You can then email it to qa-reports@lists.php.net later.
Do you want to send this report now? [Yns]: Y
E digite seu e-mail, ajudará os próximos.
Instalando:
# make install
Isso é rápido.
Habilitando Phar (PHP Archives):
# /usr/src/php-8.0.9/build/shtool install -c ext/phar/phar.phar /opt/php8/bin
# ln -s -f phar.phar /opt/php8/bin/phar
Em caso de erro evidente em alguma etapa, execute make clean estando dentro do diretório php-8.0.9, apague e recrie a pasta /opt/php8 e refaça a operação desde o ./configure.
Se futuramente decidir mudar as opções de seu ./configure depois da instalação do PHP, pare o Apache e somente repita os últimos 4 passos (./configure, make, make test e make install) e depois reinicie o Apache.
Copiando o php.ini:
# cp php.ini-development /opt/php8/php.ini
Qualquer alteração a partir de agora, faça no arquivo /opt/php8/php.ini e depois reinicie o Apache. Atente se for PHP para desenvolvimento ou produção, e copie o arquivo certo para teu caso (development ou production).
Vejamos o que diz o próprio PHP:
"O PHP vem com dois arquivos INI. Um é recomendado para ser usado em ambientes de produção e outro é recomendado para ser utilizado em ambientes de desenvolvimento.
- php.ini-production - contém configurações que possuem segurança, desempenho e melhores práticas em seu núcleo. Mas lembre-se, estas definições podem quebrar algumas compatibilidades com aplicativos de segurança mais antigos. Nós recomendamos usar o arquivo production.ini em ambientes de produção e teste.
- php.ini-development - é muito semelhante ao arquivo de produção, exceto que ele é muito mais detalhado quando se trata de erros. Recomendamos o uso da versão de desenvolvimento apenas em ambientes de desenvolvimento. Erros mostrados para os usuários podem, inadvertidamente, vazar informações vitais."
E adicione/mude no
/opt/apache2/conf/httpd.conf (vim /opt/apache2/conf/httpd.conf) do Apache 2 nas seguintes posições, linha ~53:
#Listen 12.34.56.78:80
# Listen 80 <<< comente esta linha se não estiver comentada.
Listen 127.0.0.1:80 #Ou coloque o IP do teu servidor, mas sempre coloque um IP nesta opção.
Aqui, linha ~281:
<IfModule dir_module>
DirectoryIndex index index.html index.php main.php
</IfModule>
Verifique se as linhas ~522 (Include conf/extra/proxy-html.conf), ~518 (Include conf/extra/httpd-default.conf) estão descomentadas, se não estiverem, descomente. E coloque no final do arquivo, linha ~535:
Nesta linha abaixo acrescente as extensões que quiser para que o Apache as reconheça.
# Extensões do Apache
AddType application/x-httpd-php .php .htm .html .phtml .asp
AddType application/x-httpd-php-source .phps
AddType PHPIniDir "/opt/php8"
#
# Parâmetros do fcgid
FcgidMaxProcesses 50
FcgidFixPathinfo 1
FcgidProcessLifeTime 0
FcgidTimeScore 3
FcgidZombieScanInterval 20
FcgidMaxRequestsPerProcess 0
FcgidMaxRequestLen 33554432
FcgidIOTimeout 120
#
#AddHandler fcgid-script .php
#Essa opção se descomentada provoca o aviso "Forbidden You don't have permission to access /index.php on this server.", mas permite o acesso ao localhost através do index.html. Com essa opção descomentada tu podes configurar depois no httpd.conf o acesso para somente as pastas as quais você quer que sejam acessadas.
#Options +ExecCGI
#FCGIWrapper /opt/apache2/cgi-bin/php8 .php
Ou coloque somente nos vhost que você quer habilitar o fcgid no Apache2 em substituição às 3 últimas linhas acima:
Options Indexes ExecCGI
AddHandler fcgid-script .php
FCGIWrapper /opt/apache2/cgi-bin .php
Testando a instalação:
# cd /opt/apache2/htdocs
# vim index.php
Coloque dentro o seguinte conteúdo:
<?php
phpinfo();
?>
Salve e saia do arquivo.
Inicie o Apache:
# apache2 start
Abra o navegador e digite na URL:
localhost/index.php
Deverá aparecer a página com as configurações do PHP:
PHP Version 8.0.9.
Mais abaixo procure por pdo_pgsql, pgsql e verifique se o PostgreSQL 13.3 foi devidamente reconhecido. Nesta página, tu podes também verificar se todos os módulos e funções utilizadas no ./configure estão corretamente identificados.
Vamos criar um link simbólico para cada vez que digitar php -v ou php --version apareça a versão:
# ln -s /opt/php8/bin/php /usr/bin/php
Teste:
# php -v
E então, deverá aparecer os dados do PHP 8.