Skip to content

Installazione di PHP

Premesse

Quindi useremo FastCGI.

Cosa serve

Puoi trovare tutto in questa cartella Google Drive , o usare i link qui di seguito.

servizi.jpg

Installazione di PHP, Apache e NSSM

Io preferisco avere tutto nella cartella tools, che quindi ha questa struttura:

c:\
└─ tools
   ├─ apache
   ├─ nssm
   └─ php
      ├─ 72
      ├─ 73
      └─ 74

Configurazione di Apache

File: httpd.conf

  1. Cambiare a piacere la variabile SRVROOT

    La mia punta a c:/tools/apache.

    Anche il mio PHP è nella cartella tools.

    Define SRVROOT "c:/tools/apache"
    
  2. Installare e abilitare il Proxy FastCGI

    Copiare il file mod_fcgid.so nella cartella modules dell’installazione Apache.

    LoadModule proxy_module modules/mod_proxy.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
    
  3. Correggere il comportamento del protocollo FCGI, necessario solo per Apache 2.4.25+:

    #
    # Correct FCGI protocol behavior
    #
    <IfModule proxy_fcgi_module>
    	ProxyFCGIBackendType GENERIC
    </IfModule>
    

    Necessario solo per Apache 2.4.26 e superiori, perché questa versione introduce un nuovo comportamento nel protocollo FCGI gestito dal modulo mod_proxy_fcgi. Se non specifichi questa direttiva, avrai un errore No input file specified, che è collegato a qualche stringa passata a PHP via proxy:fcgi://, stringa che non viene interpretata correttamente.

  4. Abilitare i Virtual Host:

    Include conf/extra/httpd-vhosts.conf
    
  5. Creare i Virtual Host di prova.

    Da notare lel righe del tipo

    SetHandler "proxy:fcgi://127.0.0.1:9073#"
    

    con cui specifichiamo attraverso una porta mnemonica la versione di PHP, in questo caso la 7.3.

    <VirtualHost *:80>
         ServerName php73.local
         DocumentRoot c:/tools/apache/htdocs/php73
         ErrorLog "logs/php73.local-error.log"
    
         <Files ~ "\.(php|phtml)$">
             SetHandler "proxy:fcgi://127.0.0.1:9073#"
         </Files>
    
         <Directory c:/tools/apache/htdocs/php73>
             AllowOverride all
             Options Indexes FollowSymLinks MultiViews
             Require all granted
         </Directory>
    
     </VirtualHost>
    
     <VirtualHost *:80>
         ServerName php74.local
         DocumentRoot c:/tools/apache/htdocs/php74
         ErrorLog "logs/php74.local-error.log"
    
         <Files ~ "\.(php|phtml)$">
             SetHandler "proxy:fcgi://127.0.0.1:9074#"
         </Files>
    
         <Directory c:/tools/apache/htdocs/php74>
             AllowOverride all
             Options Indexes FollowSymLinks MultiViews
             Require all granted
         </Directory>
    
     </VirtualHost>
    

    Il cancelletto (#) viene da un problema nei moduli Apache che non mandano il percorso corretto al gateway, e questo problema si può risolvere aggiungendo questo carattere alla fine dell’url dell’handler.

Configurazione dei servizi con NSSM

Il risultato che vogliamo ottenere è qualcosa del genere:

servizi.jpg

che ci permetta di vedere se i servizi sono attivi, e di accenderli e spegnerli a piacimento dalla finestra Servizi di Windows.

Lanciando nssm install, compare una finestra come questa:

Una spiegazione delle opzioni:

Nel caso di Apache, se voglio assegnare un nome servizio particolare, lo devo specificare anche nelle opzioni:

Path c:\tools\apache\bin\httpd.exe
Cartella di avvio
Argomenti -n AMP__Apache
Nome servizio AMP__Apache

Fatto, ora il sistema dovrebbe funzionare!

Attivazione di SSL

Note aggiuntive su NSSM

NSSM si può configurare completamente anche da linea di comando. Questo può tornare comodo se vogliamo, ad esempio, creare un nostro file batch per automatizzare un po’ il processo.

Una volta, ad esempio, ho dimenticato di specificare il percorso del file php.ini, e ho creato questo script per cambiare velocemente i parametri dei servizi:

nssm set AMP__PHP--%1 Application %2\php-cgi.exe
nssm set AMP__PHP--%1 AppDirectory %2
nssm set AMP__PHP--%1 AppPArameters -c %2\php.ini -b 127.0.0.1:90%1

L’ho chiamato set-php.bat e messo nella cartella dell’eseguibile nssm.exe. Poi, da terminale, l’ho chiamato così:

set-php 74 C:\tools\php\7.4.7
set-php 73 C:\tools\php\7.3.19
set-php 72 C:\tools\php\7.2.31
set-php 71 C:\tools\php\7.1.33
set-php 70 C:\tools\php\7.0.33
set-php 56 C:\tools\php\5.6.40
set-php 55 C:\tools\php\5.5.38
set-php 54 C:\tools\php\5.4.45
set-php 53 C:\tools\php\5.3.29
set-php 52 C:\tools\php\5.2.17

Comodo no?