User Tools

Site Tools


doc:appunti:prog:note_di_programmazione_in_php

Note programmazione PHP

PHPSESSIONID

Quando si usano le sessioni il PHP riscrive gli URL relativi, aggiungendo la variabile PHPSESSIONID. Questo è un meccanismo di sicurezza per tentare di far funzionare le sessioni nel caso che i cookie siano disabilitati. Se siamo sicuri che le sessioni funzionano tramite cookie e non vogliamo che gli URL vengano “sporcati”, si possono impostare alcune opzioni nel file di configurazione di apache, in php.ini oppure nel codice PHP subito prima della funzione session_start():

# Those settings should double-assure that relative URLs
# will not be rewritten with ?PHPSESSID= added.
ini_set('url_rewriter.tags', '');
ini_set('session.use_trans_sid', false);

Scrivere gli URL

Dovendo generare un URL cliccabile:

$url  = 'page?';
$url .= 'param=' . urlencode($value);
echo '<a html="' . $url . '">';

Come si deve eventualmente codificare page e param dell'esempio precedente se contenessero caratteri strani?

Moduli PEAR non pacchettizzati

Volendo installare il pacchetto Pear MDB2 con il dirver PostgreSQL e il pacchetto Pear Auth: installato il pacchetto Ubuntu php-pear, i pacchetti aggiuntivi sono stati scaricati direttamente dal repository Pear, perché non presenti in Ubuntu (nota: in Debian invece esiste almeno il pacchetto php-auth):

pear install MDB2
pear install MDB2#pgsql
pear install -f OLE
pear install -f Spreadsheet_Excel_Writer
pear install Auth

L'opzione -f forza l'installazione anche in caso di versioni beta, ecc. I pacchetti Pear vengono salvati in /usr/share/php/.

Personalizzare php.ini in esecuzione CGI o FastCGI

Se il PHP viene eseguito come CGI oppure come FastCGI le impostazioni tradizionali di php.ini oppure del VirtualHost di Apache non sono prese in considerazione.

Una soluzione è quella di creare un wrapper che faccia puntare ad una directory con il php.ini personalizzato ed eventualmente settare le necessarie variabili di ambiente.

Ecco un esempio per impostare la Default timezone e la date.timezone. Si crea un file php-fcgi-wrapper:

#!/bin/sh
PHPRC="/var/www/customer1/php-cgi/"
export PHPRC
PHP_DOCUMENT_ROOT="/var/www/customer1/www"
export PHP_DOCUMENT_ROOT
export TZ=Europe/Rome
exec /usr/bin/php-cgi $1

e quindi nel VirtualHost di Apache si attiva il wrapper con qualcosa del genere:

    </Directory>
        <Directory /var/www/customer1/www>
        AddHandler fcgid-script .php .php3 .php4 .php5
        FCGIWrapper /var/www/customer1/php-cgi/php-fcgi-wrapper .php
        Options +ExecCGI
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>

Nel php.ini personalizzato si può mettere ovviamente:

[Date]
date.timezone = Europe/Rome

Dopo aver modificato il wrapper - se si usa FastCGI - bisogna riavviare Apache in modo da ricaricarlo in memoria.

Gestione degli errori

Con alcuni software (CMS tipo Joomla, ecc.) è facile incappare in errori del tipo:

Strict Standards: Non-static method xxx should not be called statically in xxx/joomla/import.php on line 29

questo specialmente dopo l'aggiornamento a versioni superiori del PHP, che sono più rigide sulla sintassi del linguaggio.

Intanto può essere utile avere un pezzo di codice che genera un errore E_STRICT, in quanto tale errore non può essere generato dalla funzione trigger_error(), ecco un esempio:

class A           { function toto(  ) {} }
class B extends A { function toto($a) {} }

Quindi in php.ini si verifica che gli errori E_STRICT siano disabilitati:

error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

Attenzione che Joomla tiene in cache le pagine generate, dopo aver modificato la configurazione del PHP è necessario svuotare la cache per vedere il risultato.

doc/appunti/prog/note_di_programmazione_in_php.txt · Last modified: 2013/04/16 09:33 by niccolo