Executando duas versões do PHP (5.3 e 5.2) ao mesmo tempo

1

Eu li este tópico: Executando php4 e php5 ao lado de cada outro

Lá, o problema é lidar com duas gerações diferentes de PHP (PHP 4 vs PHP 5), mas o que eu preciso é fazer com que todas as contas do servidor funcionem em 5.3 e apenas um domínio em 5.2.

Não consigo fazer isso por meio de modelos do Apache, e a resposta de link não se aplica, pois no meu caso não posso usar uma porta diferente - este é um site normal no mesmo servidor.

    
por Islam Baraka 04.07.2013 / 14:26

3 respostas

4

Você ainda pode usar a resposta em link ; você só precisa adicionar uma maneira de redirecionar o tráfego para a outra porta. Veja como:

Você configurou uma instância apache separada com o PHP 5.2 e configurou para escutar a porta 8080.

Em seu apache normal, você altera o VirtualHost para esse domínio para que ele agora contenha um proxy reverso para o apache 5.2. Exemplo:

<VirtualHost *:80>
   Servername php52.example.com
   ProxyPass / http://yourservername.example.com:8080/
   ProxyPassReverse / http://yourservername.example.com/
</VirtualHost> 

Dessa forma, sua instância original do apache aceitará todo o tráfego para todos os sites em seu servidor. Mas as solicitações para esse domínio específico serão encaminhadas de forma transparente para a outra instância sem que o usuário do outro lado do navegador saiba disso.

    
por 04.07.2013 / 14:41
2

Existe uma maneira de conseguir isso em uma base por diretório. Você encontra opiniões contraditórias na Web, mas eu consegui fazê-lo funcionar.

Primeiro, você deve organizar para ter suas diferentes versões do PHP prontas para serem executadas como extensões CGI ou fastCGI. Eu uso fastCGI no exemplo abaixo

Você precisará configurar dois arquivos php.ini separados (e sim, mantê-los em sincronia onde for importante pode ser um problema, mas a alternativa é ter apenas um arquivo php.ini para 2 versões diferentes de PHP e amp isso é impossível ou cheio de lacunas)

Coloque esses arquivos php.ini no diretório do seu código PHP, módulos, etc. um para cada versão. É aí que o PHP irá procurá-los primeiro, sem a variável de ambiente PHPRC. Você deve não definir a variável PHPRC, a menos que você descubra como torná-la diferente para dois stubs de fastCGI diferentes, não consegui: a diretiva Apache FcgidInitialEnv funciona somente globalmente, não em um diretório por base, e as FcgidCmdOptions que é suposto não funciona de todo.

Então, tudo que você precisa fazer é adicionar o seguinte código no seu arquivo httpd.conf:

#
# start PHP as FastCGId
#

LoadModule fcgid_module modules/mod_fcgid.so

#
# PHP 7.0 is the default
# PHP 5.2 is the legacy
#

<Files ~ "\.php$>"
  AddHandler fcgid-script .php
  FcgidWrapper "c:/WebServers/PHP-7.0.5/php-cgi.exe" .php
</Files>

#
# Keep PHP 5.2 for legacy Drupal sites
#
<DirectoryMatch "Puitscarre|Royale$">

  <Files ~ "\.php$>"
    AddHandler fcgid-script .php
    FcgidWrapper "c:/WebServers/PHP-5.2.39/php-cgi.exe" .php
  </Files>

</DirectoryMatch>

Funciona perfeitamente no meu ambiente: Windows 7, Apache 2.2. E, a propósito, o código que está no ambiente Directory acima também funciona se você colocá-lo no arquivo .htaccess dos diretórios que precisam de uma versão específica ou legada do PHP

Aproveite!

    
por 24.04.2016 / 14:35
1

Eu apenas usei cgi para esse caso

<VirtualHost *:80>
    Servername site.example.net
    ScriptAlias /php-fastcgi/ /usr/local/php-5.2.17/bin/

    AddHandler php-fastcgi .php
    AddType application/x-httpd-php .php
    Action php-fastcgi /php-fastcgi/php-cgi
...
</VirtualHost>
    
por 04.07.2013 / 17:39