In questa sezione sono presenti le domande più frequenti riguardo l'installazione di PHP. PHP è disponibile per quasi tutti i sistemi operativi (eccetto forse MacOS prima di OSX), e per quasi tutti i webserver.
Per installare PHP, seguire le istruzioni del file Installazione e configurazione.
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.
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
--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.
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 » http://bugs.php.net/ 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
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
AddType application/x-httpd-php .php
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.
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.
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.
[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.
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:
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.
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.
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().
Su Windows NT, 2000, XP e 2003:
Vai nel Pannello di Controllo e apri l'icona Sistema (Start -> Impostazioni -> Pannello di Controllo -> Sistema, o semplicemente Start -> Pannello di Controllo -> Sistema su Windows XP/2003+)
Vai alla linguetta Avanzate
Click sul bottone 'Variabili d'Ambiente'
Guarda il pannello 'Variabili di sistema'
Trova il valore Path (potrebbe essere necessario scorrere la lista)
Fai doppio click su questo valore
Aggiungi la cartella PHP alla fine, anteponendo ';' prima (es. ;C:\php)
Premi OK e riavvia il computer
Su Windows 98/Me devi modificare il file autoexec.bat:
Apri il Blocco Note (Start -> Esegui e inserisci 'notepad')
Apri il file C:\autoexec.bat
Trova la linea con PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;..... e aggiungi: ;C:\php alla fine della linea
Salva il file e riavvia il computer
Nota: Assicurati di fare un reboot dopo aver seguito queste istruzione per esser certo che le modifiche a PATH siano applicate.
Il manuale PHP consigliava di copiare i file dentro la cartella sistema di Windows, poiché questa cartella (C:\Windows, C:\WINNT, ecc.) è di default nel PATH di sistema. Copiare file nella cartella sistema di Windows è ora sconsigliato perché può causare problemi.
Ci sono diversi modi per farlo. Se stai usando Apache, leggi le istruzioni specifi che installazione (Apache 1, Apache 2), altrimenti devi impostare la variabile d'ambiente PHPRC:
Su Windows NT, 2000, XP e 2003:
Vai nel Pannello di Controllo e apri l'icona Sistema (Start -> Impostazioni -> Pannello di Controllo -> Sistema, o semplicemente Start -> Pannello di Controllo -> Sistema su Windows XP/2003)
Vai alla linguetta Avanzate
Click sul bottone 'Variabili d'Ambiente'
Guarda il pannello 'Variabili di sistema'
Fai click su 'Nuovo' ed inserisci 'PHPRC' come nome della variabile; inserisci la cartella dove si trova php.ini nel valore della variabile (es. C:\php)
Premi OK e riavvia il computer
Su Windows 98/Me devi modificare il file autoexec.bat:
Apri il Blocco Note (Start -> Esegui e inserisci 'notepad')
Apri il file C:\autoexec.bat
Aggiungi una nuova linea alla fine del file: set PHPRC=C:\php (sostituire C:\php con la cartella dove si trova php.ini). Nota che il percorso non può contenere spazi. Per esempio, se PHP è installato in C:\Program Files\PHP, si deve inserire C:\PROGRA~1\PHP.
Salva il file e riavvia il computer
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
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>