Guida alle tecnologie

PHP-FastCGI: test, php.ini per sito e impostazioni singole

4 min read Server PHP Aggiornato 01 Oct 2025
PHP-FastCGI: php.ini per sito e impostazioni
PHP-FastCGI: php.ini per sito e impostazioni

Questa guida mostra come testare PHP via FastCGI su Apache, assegnare un php.ini specifico a ciascun sito e cambiare singole direttive usando l’opzione -d di php-cgi. Include esempi pratici, una checklist per amministratori e uno schema decisionale rapido.

Testare PHP con FastCGI

Creiamo un piccolo file di test PHP sul sito www.example1.com per verificare che PHP stia girando come CGI/FastCGI.

Apri il file di test (esempio path per una distribuzione tipica):

vi /srv/www/web1/web/info.php

Inserisci questo contenuto:

Poi apri nel browser:

http://www.example1.com/info.php

Se tutto è configurato correttamente, la pagina phpinfo() mostrerà la riga “Server API” con CGI/FastCGI.

Uscita di phpinfo che mostra

Importante: se non vedi CGI/FastCGI, controlla i log di Apache e gli script wrapper php-fcgi-starter.

Usare un php.ini diverso per ogni sito

Per avere configurazioni PHP diverse per ogni sito, sfrutta lo script wrapper php-fcgi-starter per ciascun virtual host. Di seguito un esempio che copia il php.ini di default nella directory del sito web2 e imposta i permessi corretti.

Esegui questi comandi (esegui come utente con permessi adeguati):

cp /etc/php5/fastcgi/php.ini /srv/www/web2/
chown web2:web2 /srv/www/web2/php.ini

Modifica poi lo script wrapper del sito (per esempio):

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

Assicurati che la variabile PHPRC punti alla directory che contiene php.ini del sito:

#!/bin/sh
PHPRC=/srv/www/web2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi

Dopo la modifica, riavvia Apache:

/etc/init.d/apache2 restart

Crea un file phpinfo() per www.example2.com e aprilo nel browser:

vi /srv/www/web2/web/info.php

La riga “Loaded Configuration File” dovrebbe mostrare ora /srv/www/web2/php.ini.

Schermata phpinfo che mostra il percorso di php.ini caricato: /srv/www/web2/php.ini

Nota: mantenere php.ini nella directory del sito permette di avere limiti, estensioni e direttive diverse per host.

Cambiare singole impostazioni PHP senza un nuovo php.ini

Se preferisci non fornire un php.ini completo per un sito, puoi modificare singole direttive avviando php-cgi con l’opzione -d. Esempio: disabilitare magic_quotes_gpc per www.example2.com.

Apri lo script wrapper del sito:

vi /srv/www/php-fcgi-scripts/web2/php-fcgi-starter

Modificalo in questo modo:

#!/bin/sh
PHPRC=/etc/php5/fastcgi/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/bin/php-cgi -d magic_quotes_gpc=off

Riavvia Apache:

/etc/init.d/apache2 restart

Apri nuovamente http://www.example2.com/info.php e cerca la riga magic_quotes_gpc: dovrebbe risultare Off.

Screenshot di phpinfo che mostra magic_quotes_gpc impostato su Off

Best practice e suggerimenti rapidi

  • Mantieni script wrapper separati per ciascun sito. Così puoi riavviare o riciclare solo i processi di quel sito.
  • Non esporre php.ini con permessi globali di scrittura. Usa owner e group appropriati.
  • Testa ogni cambiamento su un sito di staging prima di applicarlo in produzione.
  • Controlla i log di Apache (/var/log/apache2/) dopo ogni modifica.

Checklist per ruolo

Sysadmin:

  • Verificare che lo user del sito possieda /srv/www//php.ini
  • Controllare permessi e ownership
  • Riavviare solo quando necessario per evitare downtime
  • Monitorare errori e slow CGI processes

Sviluppatore:

  • Confermare le direttive PHP richieste dall’app
  • Testare phpinfo() e script principali dopo le modifiche
  • Evitare direttive globali che compromettono sicurezza

Mini-metodologia: come procedere in 5 passi

  1. Creare un phpinfo() locale e aprirlo nel browser.
  2. Identificare la configurazione corrente (Server API, Loaded Configuration File).
  3. Decidere tra php.ini specifico o singole direttive (-d).
  4. Applicare modifiche nello script wrapper del sito.
  5. Riavviare Apache e verificare con phpinfo().

Schema decisionale (mermaid)

flowchart TD
  A[Ho bisogno di configurazione diversa per il sito?] -->|Sì| B[Creare php.ini nella directory del sito]
  A -->|No| C[Usare php-cgi -d per impostazioni singole]
  B --> D[Impostare PHPRC nello script wrapper]
  C --> D
  D --> E[Riavviare Apache]
  E --> F[Verificare con phpinfo'']

Quando questo approccio può fallire

  • Se Apache è configurato per usare mod_php invece di FastCGI, le configurazioni dei wrapper non avranno effetto.
  • Se SELinux/AppArmor blocca l’accesso ai php.ini personalizzati.
  • Se lo script wrapper non viene eseguito con i permessi corretti.

1-linea glossario

  • php-cgi: eseguibile PHP per CGI/FastCGI; -d permette di impostare direttive PHP on-the-fly.

Link utili

Riepilogo

Questa procedura consente di gestire configurazioni PHP diverse per ogni virtual host usando script wrapper FastCGI. Puoi scegliere tra fornire un php.ini dedicato o modificare singole direttive con l’opzione -d. Verifica sempre con phpinfo() e monitora i log dopo ogni modifica.

Note:

  • Modifiche errate a php.ini o a process manager possono causare errori di runtime. Testa in ambiente di staging.
  • Mantieni backup dei file php-fcgi-starter prima di editarli.
Autore
Redazione

Materiali simili

Installare e usare Podman su Debian 11
DevOps

Installare e usare Podman su Debian 11

Guida rapida a apt-pinning su Debian
Linux

Guida rapida a apt-pinning su Debian

Forzare FSR 4 con OptiScaler: guida completa
Guide.

Forzare FSR 4 con OptiScaler: guida completa

Dansguardian + Squid NTLM su Debian Etch
Rete

Dansguardian + Squid NTLM su Debian Etch

Riparare errore installazione SD su Android
Android

Riparare errore installazione SD su Android

Cartelle di rete con KNetAttach e remote:/
Linux

Cartelle di rete con KNetAttach e remote:/