In questa sezione sono presenti le domande più frequenti riguardo l'installazione
di PHP. PHP è disponibile per quasi tutti i sistemi operativi e per quasi tutti i webserver.
-
Perché non dovrei usare Apache2 con il threaded MPM in un ambiente di produzione?
-
PHP è una colla. È la colla utilizzata per creare belle applicazioni web
appiccicando decine di librerie di terze parti e facendole apparire
come una entità coerente attraverso un'interfaccia di linguaggio intuitiva e facile da
apprendere. La flessibilità e potenza di PHP dipendono dalla stabilità e
robustezza della piattaforma sui cui gira. Ha bisogno di un sistema operativo funzionante, un
web server funzionanante e delle librerie esterne funzionanti, per ottenere lo scopo. Se uno qualsiasi
di questi elementi smette di funzionare, PHP ha bisogno di metodi per identificare il problema e risolverlo
velocemente. Quando si rende il framework più complesso eliminando
completamente i thread di esecuzione separata, i segmenti separati di memoria
ed un solido ambiente in cui eseguire ogni richiesta, si introduce
un punto di debolezza nel sistema PHP.
Se il threaded MPM è necessario, meglio considerare una configurazione FastCGI
dove PHP sia eseguito nel proprio spazio di memoria.
-
Unix/Windows: dove devo mettere il mio file
php.ini?
-
Nei sistemi Unix il percorso predefinito è /usr/local/lib
ovvero <install-path>/lib.
Molti utenti vorranno cambiare questo percorso durante la fase di compilazione con il flag
--with-config-file-path. Per esempio
potresti modificare il percorso in un modo simile a questo:
--with-config-file-path=/etc
e quindi dovresti copiare il file php.ini-dist della distribuzione in
/etc/php.ini e modificarlo
per ottenere tutti i cambiamenti voluti.
--with-config-file-scan-dir=PATH
Nei sistemi Windows il percorso predefinito per php.ini corrisponde alla
cartella stessa di Windows. Se si sta usano il web server Apache, php.ini viene prima
cercato nella cartella di installazione di Apache, es c:\program
files\apache group\apache. In questo modo si possono avere
differenti php.ini per differenti versioni di Apache sulla stessa
macchina.
Vedere anche il capitolo sul file di configurazione.
-
Unix: ho installato PHP, ma ogni volta che carico uno script ricevo un messaggio di errore che dice:
'Document Contains No Data' (lo script non contiene dati). Che sta succedendo?
-
Probabilmente PHP sta riscontrando un qualche tipo di problema e
sta generando un core dump. Controlla il file log degli errori del tuo
server ed individua il problema, quindi cerca di riprodurre il problema in un
piccolo script. Se sai come usare 'gdb', sarebbe di aiuto fornire agli
sviluppatori una copia dei messaggi di errore per consentire agli stessi di
localizzare il problema. Se usi PHP come modulo di Apache prova ad eseguire
le seguenti operazioni:
-
Ferma i tuoi processi httpd
-
gdb httpd
-
Ferma i tuoi processi httpd
-
> esegui -X -f /percorso/per/httpd.conf
-
Quindi trova l'URL che causa problemi usando il tuo browser
-
> esegui -X -f /percorso/per/httpd.conf
-
Se ottieni un, gdb ora dovrebbe informarti di ciò
-
digita: bt
-
Comunica il bug a » https://github.com/php/php-src/issues
includendo un backtrace del problema.
Se nei tuoi script usi espressioni regolari
(ereg() e simili), dovresti assicurarti
di aver compilato PHP e Apache con lo stesso pacchetto di
espressioni regolari. Ciò dovrebbe succedere
automaticamente con PHP e Apache 1.3.x
-
Unix: ho installato PHP usando dei pacchetti RPM, ma Apache
non processa le mie pagine PHP. Che sta succedendo?
-
Presumendo che tu abbia installato sia Apache che PHP da pacchetti RPM,
hai bisogno di decommentare o aggiungere qualcuna o tutte le righe seguenti
nel file httpd.conf:
# Extra Modules
AddModule mod_php.c
AddModule mod_perl.c
# Extra Modules
LoadModule php_module modules/mod_php.so
LoadModule php5_module modules/libphp5.so
LoadModule perl_module modules/libperl.so
And add:
AddType application/x-httpd-php .php
... alle proprietà globali o alle proprietà del VirtualDomain
su cui vuoi aggiungere il supporto PHP.
-
Unix: ho installato la patch di Apache per avere compatibilità con le estensioni del server di FrontPage,
e improvvisamente PHP ha smesso di funzionare: PHP è quindi incompatibile con le estensioni del server di
FrontPage per Apache?
-
No, PHP lavora senza problemi con le estensioni del server di FrontPage.
Il problema è che la patch di FrontPage modifica diverse strutture di
Apache dalle quali dipende PHP stesso. Per risolvere il problema
ricompila PHP (usando 'make clean ; make') dopo aver installato la patch.
-
Unix/Windows: ho installato PHP, ma se provo ad accedere ai miei
script via browser, ricevo una pagina vuota.
-
Controlla il sorgente della pagina che ricevi e probabilmente vedrai
il codice sorgente del tuo script PHP.
Ciò significa che il webserver
non ha inviato lo script all'interprete PHP. C'è qualcosa che non va
nella configurazione del webserver: confronta la configurazione del
webserver con le istruzioni per installare PHP.
-
Unix/Windows: ho installato PHP, ma se
provo ad accedere ai miei script via browser,
ricevo un errore 500 dal server.
-
C'è qualcosa che non va al momento in cui il server prova
a richiamare l'interprete PHP. Per ricevere un messaggio
sensato di errore, dalla linea di comando, cambia la
cartella che contiene l'eseguibile di PHP (php.exe
sotto Windows) ed esegui php -i. Se PHP
riscontrerà dei problemi durante l'esecuzione, comparirà un
opportuno messaggio d'errore contente informazioni su cosa fare
successivamente. Se riceverai una schermata di codice HTML
(la stessa di phpinfo()) significherà che PHP
sta lavorando correttamente, e quindi il problema potrebbe essere
legato alla configurazione del server, che andrebbe quindi controllata.
-
Diversi sistemi operativi: ho installato PHP senza ricevere errori,
ma se provo a far partire Apache ricevo un errore con strani simboli:
[mybox:user /src/php5] root# apachectl configtest
apachectl: /usr/local/apache/bin/httpd Undefined symbols:
_compress
_uncompress
-
Ciò non ha nulla a che vedere con PHP, ma con le librerie lato client di MySQL.
Alcune richiedono --with-zlib, altre no. Questo
argomento è ripreso meglio nelle FAQ relative a MySQL.
-
Windows: ho installato PHP, ma se provo ad accedere
ai miei script via browser, ricevo questo errore:
cgi error:
The specified CGI application misbehaved by not
returning a complete set of HTTP headers.
The headers it did return are:
-
Questo errore vuol dire che PHP non è riuscito ad ottenere
qualcuno di tutti gli output richiesti. Per ricevere un messaggio
sensato di errore, dalla linea di comando, cambia la cartella che
contiene l'eseguibile di PHP (php.exe sotto
Windows) ed esegui php -i. Se PHP riscontrerà
dei problemi durante l'esecuzione, comparirà un opportuno messaggio d'errore contente informazioni su cosa
fare successivamente. Se riceverai una schermata di codice HTML (la stessa di phpinfo())
significherà che PHP sta lavorando correttamente, e quindi il problema potrebbe essere legato alla
configurazione del server, che andrebbe quindi controllata.
Dopo che PHP sta lavorando dalla linea di comando, prova ad accedere
di nuovo ai tuoi script via browser. Se ancora ricevi messaggi di errore,
il problema potrebbe essere dovuto ad una delle seguenti cose:
-
I permessi dei file php.exe,
php5ts.dll, php.ini o di qualche
altra estensione PHP che stai cercando di caricare potrebbero
essere settati in modo da impedire l'accesso
agli utenti anonimi di internet
ISUR_<machinename>
.
-
Il file dello script non esiste (o forse non è dove pensi
in relazione alla tua root directory). Nota che con IIS
puoi aggirare quest'ostacolo selezionando la voce
relativa a 'check file exists' (controlla se il
file esiste) nelle opzioni di Internet Services Manager. Se il file
di uno script non esiste il server invierà un errore 404. C'è un
ulteriore beneficio: IIS si preoccuperà di effettuare
tutte le autenticazioni necessarie al posto tuo, in base ai permessi NTLanMan
del tuo file contenente lo script.
-
Windows: ho seguito tutte le istruzioni, ma
proprio non riesco a far convivere PHP con IIS!
-
Assicurati che l'utente con il quale stai cercando di eseguire script
PHP abbia i permessi necessari per eseguire php.exe!
IIS usa un utente anonimo che viene aggiunto al momento dell'installazione
del webserver. Questo utente ha bisogno dei permessi appropriati per eseguire
php.exe. Qualunque utente avrà bisogno dei permessi appropriati per eseguire php.exe.
Se usi IIS4, hai bisogno di dire al webserver che c'è un parser PHP.
Può essere utile leggere
queste faq.
-
Quando uso PHP come un CGI con IIS, PWS, OmniHTTPD o Xitami,
ricevo questo errore:
Security Alert! PHP CGI
cannot be accessed directly.
.
-
Devi impostare la direttiva
cgi.force_redirect a 0
.
Il suo default è 1
quindi assicurati che la direttiva
non sia commentata (con un ;
). Come
tutte le direttive, è impostata in php.ini
Dal momento che il default è 1
, è importantissimo
essere sicuri al 100% che venga letto il file php.ini corretto.
Leggere questa faq
per meggiori dettagli.
-
Come faccio a capire se il mio php.ini è stato trovato e letto?
Sembra che le mie modifiche non siano state impostate.
-
Per essere certo che il tuo php.ini sia stato letto da PHP, chiama la funzione
phpinfo() e nella parte alta troverai una lista
intitolata Configuration File (php.ini)
.
Questa ti dirà dove PHP sta cercando php.ini e
se è stato letto o meno. Se si vede solo il PATH ad una cartella
significa che non è stato letto e che devi mettere il php.ini
in quella cartella. Se php.ini compare nel PATH della cartella
significa che è stato letto.
Se php.ini viene e si sta eseguendo PHP come un modulo,
assicurarsi di riavviare il server web dopo aver fatto un cambiamento a
php.ini
Vedere anche php_ini_loaded_file().
-
Come rendo disponibile in windows il file php.ini?
-
Ci sono diversi modi per farlo. Se si sta usando Apache,
fare riferimento alla documentazione di Apache, altrimenti
bisogna impostare la variabile d'ambiente PHPRC.
-
Si può usare la Apache content negotiation (opzione MultiViews)
con PHP?
-
Se i link ai file PHP includono le estensioni, tuto funziona perfettamente. Questa
FAQ è solo nel caso in cui i link ai file PHP non includano le estensioni
e si voglia usare la content negotiation per identificare i file PHJP dalla URL
senza estensioni.
In questo caso, sostituire la riga AddType application/x-httpd-php
.php
con:
AddHandler php5-script php
AddType text/html php
Questa soluzione non funziona con Apache 1 poiché il modulo PHP non intercetta
php-script
.
-
PHP è limitato a processare solo metodi GET e POST?
-
No, si possono gestire tutti i metodi di richiesta, es. CONNECT. Lo stato
appropriato di risposta può essere inviato con la funzione header().
Se devono essere gerstiti solo i metodi GET e POST, questo può essere ottenuto con
questa configurazione diApache:
<LimitExcept GET POST>
Deny from all
</LimitExcept>