Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 67 di 67
  • livello intermedio
Indice lezioni

La configurazione di PHP

Una guida pratica ai principali valori presenti nel file php.ini, il file di configurazione di PHP
Una guida pratica ai principali valori presenti nel file php.ini, il file di configurazione di PHP
Link copiato negli appunti

Come molti altri strumenti di sviluppo PHP può essere configurato attraverso un file di configurazione che definisce e guida il comportamento delle zend engine e delle sue estensioni. Le proprietà di configurazione possono essere assegnate e modificate in vari modi, che analizziamo brevemente; va anticipato che alcune proprietà possono essere modificate solamente in alcuni contesti, solitamente per motivi di sicurezza.

La prima soluzione è apportare manualmente le modifiche al file php.ini presente nella directory di configurazione di PHP. Ogni volta che si apportano modifiche a questo file è necessario riavviare l'interprete (solitamente riavviando il webserver di supporto) e spesso il file, per motivi di sicurezza, risulta protetto da modifiche da parte degli utenti che usufruiscono di servizi hosting.

Il formato del file di configurazione di PHP è molto semplice e segue gli standard utilizzati da altri strumenti opensource:

  • Vengono saltate tutte le righe vuote o precedute da un punto e virgola;
  • Le proprietà sono definite da una serie di caratteri senza spazi;
  • Ogni riga definisce un'operazione di assegnamento (utilizzando l'operatore uguale);
  • I valori possono essere numeri, costanti interne, stringhe o altre espressioni valide interpretate dal motore;

La seconda soluzione possibile, optabile solamente nel caso in cui PHP giri come modulo del webserver Apache, è sfruttare gli strumenti di configurazione del webserver stesso per modificare il comportamento di PHP. Attraverso la direttiva php_flag possiamo impostare ad On o Off i valori di una variabile di configurazione di PHP; in caso i valori di una variabile siano valori differenti dal booleano è possibile utilizzare php_value:

php_value error_reporting E_ALL
php_flag register_globals Off

Se il webserver e PHP sono preconfigurati correttamente, le direttive possono essere specificate sia in un file .htaccess che all'interno del file http.conf, magari sfruttando la possibilità di definire comandi in base alla directory.

L'ultima opzione possibile è quella di modificare i valori direttamente all'interno del proprio codice PHP sfruttando la funzione ini_set (con ini_get possiamo recuperare i valori assegnati o specificati con i parametri di configurazione):

<?php
ini_set('include_path', ini_get('include_path').':../includes:');
?>

Ovviamente alcune direttive non ha senso siano impostate all'interno del codice, come ad esempio quelle che operano sui dati in ingresso.

Vediamo ora alcuni parametri di configurazione che controllano il comportamento del motore di PHP:

allow_call_time_pass_reference(boolean): Abilita o meno la possibilità di forzare gli argomenti delle funzioni ad essere passati per riferimento. Questo parametro è deprecato e potrebbe non essere più supportato nelle versioni future di PHP/Zend. Si incoraggia il metodo di specificare quale parametro debba essere passato per riferimento al momento della dichiarazione della funzione. Si suggerisce di impostare l'opzione a off per essere certi che lo script funzioni correttamente con questa impostazione, in modo da predisporsi ad eventuali modifiche future del linguaggio (si riceverà un warning ogni volta che si utilizza questa opzione e i valori saranno passati per valore anzichè per riferimento). Passare i valori per riferimento al momento della chiamata della funzione viene sconsigliato per motivi di chiarezza del codice. La funzione può modificare il parametro in modo non previsto se non indica questo come passato per riferimento. Per evitare effetti secondari inattesi, è meglio indicare soltanto al momento della dichiarazione della funzione quali parametri saranno passati per riferimento.

short_open_tag(boolean): Indica se abilitare o meno la forma abbreviata dei tag di apertura del PHP (<? ?>). Se si desidera utilizzare il PHP in combinazione con l'XML, occorre disabilitare questa opzione per potere abilitare la riga <?xml ?>. In alternativa occorre stampare il testo con il PHP, ad esempio: <?php echo '<?xml version="1.0"'; ?>. Inoltre, se disabilitato, occorre utilizzare la versione lunga dei tag di apertura del PHP (<?php ?>). Questo parametro influisce anche su <?=, la quale è identica a <? echo. L'uso di questa abbreviazione richiede l'abilitazione di short_open_tag. È ormai buona norma disabilitare la forma abbreviata ed utilizzare quella estesa, quindi è consigliabile impostare a Off questo valore.

- memory_limit(integer): Questo parametro imposta la dimensione massima in byte di memoria occupabile dallo script. Questo aiuta a impedire che script scritti male utilizzino tutta la memoria del server. Per potere utilizzare questo parametro occorre abilitarlo al momento della compilazione. Pertanto occorrerà includere nella configurazione la linea: --enable-memory-limit. Si noti che occorre impostare il parametro a -1 se non si desidera impostare limiti di memoria.

post_max_size(integer): Imposta la dimensione massima dei dati post. Questa impostazione influenza anche gli upload dei file. Per permettere upload di file di grandi dimensioni, il valore impostato deve essere maggiore di upload_max_filesize. Anche il limite di memoria, memory_limit, se abilitato, può limitare gli upload di file. In termini generali memory_limit dovrebbe essere maggiore di post_max_size. Il valore assegnabile è soggetto alle regole sintattiche del file PHP.ini, quindi è possibile utilizzare delle abbreviazioni per specificare megabyte o gigabyte di dati: 20M o 1G. Se la dimensione dei dati post è maggiore di post_max_size, le variabili superglobale $_POST e $_FILES sono vuote. Questo può essere rilevato in diversi modi, ad esempio passando una variabile $_GET allo script che processa i dati, tipo <form action="edit.php?processed=1">, e verificare se $_GET['processed'] è impostata.

include_path(string): Elenco di directory in cui le funzioni require(), include() e fopen_with_path() cercheranno i files. Il formato è tipo la variabile d'ambiente PATH: una lista di directory separate da due punti in Unix, punto e virgola in Widnows. L'uso di . nel percorso di include indica, negli include relativi, la directory corrente.

extension_dir(string): Directory in cui il PHP cerca i moduli caricabili dinamicamente.

extension(string): Specifica quale modulo dinamico caricare quando viene avviato l'interprete PHP;

upload_tmp_dir(string): Directory temporanea utilizzata per il transito dei file durante l'upload. Deve avere i permessi di scrittura per gli utenti utilizzati dal PHP per girare. Se non indicata il PHP utilizzerà il default di sistema.

upload_max_filesize(integer): La dimensione massima di un file inviato. Il valore assegnabile è soggetto alle regole sintattiche del file PHP.ini, quindi è possibile utilizzare delle abbreviazioni per specificare megabyte o gigabyte di dati: 20M o 1G.

Alcune volte potrebbe capitare di dover specificare opzioni relative alle singole estensioni utilizzate all'interno dell'interprete PHP. Quando una proprietà è specifica di un determinato contesto questa viene preceduta dal nome che identifica questo contesto seguito da un punto. Vediamo alcune delle direttive contestuali utili:

output_buffering(boolean): è possibile abilitare il buffering automatico dell'output per tutti i file settando la direttiva ad On. È possibile anche limitare le dimensioni del buffer ad una dimensione predefinita, impostando la proprietà ad un intero;

output_handler(string): è possibile inviare tutto l'output bufferizzato ad una funzione che si occupi di effettuarne delle trasformazioni. La direttiva output_handler permette di specificare il nome della funzione da utilizzare di default prima di restituire l'output. Per esempio è possibile impostare il valore a ob_gzhandler per comprimere l'output, oppure a mb_output_handler per modificare automaticamente la codifica dei dati in uscita;

SMTP(string): Usato solo sotto Windows: Nome DNS o indirizzo IP del server SMTP che PHP deve usare per spedire posta elettronica con la funzione mail();

smtp_port(int): Usato solo sotto Windows: Numero della porta del server specificato da SMTP al quale connettersi quando si inviano email usando mail(); il valore predefinito è 25.

sendmail_from(string): Quale campo "From:" devono avere i messaggi inviati da PHP sotto Windows.

sendmail_path(string): Dove trovare il programma sendmail, solitamente /usr/sbin/sendmail oppure /usr/lib/sendmail. configure cerca di trovare il file e lo imposta di default, ma se non riesce a localizzarlo, lo si può impostare qui. I sistemi che non usano sendmail devono impostare questa direttiva al wrapper che i rispettivi sistemi di posta offrono, se esistenti. Per esempio, gli utenti di Qmail possono normalmente impostarla a /var/qmail/bin/sendmail o /var/qmail/bin/qmail-inject. qmail-inject non necessita di nessuna opzione al fine di processare correttamente la mail. Questi parametri funzionano anche su Windows. Se si impostate smtp, smtp_port e sendmail_from saranno ignorate e verrà eseguito il comando indicato.

Vi sono moltissime altre proprietà con le quali è possibile ottenere un ottimo controllo del comportamento del motore di PHP, quindi è sempre buona norma consultare la documentazione ufficiale per comprendere come controllare le tecnologie che si intende utilizzare

Ti consigliamo anche