User Tools

Site Tools


doc:appunti:prog:note_di_programmazione_in_php

This is an old revision of the document!


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
doc/appunti/prog/note_di_programmazione_in_php.1337632133.txt.gz · Last modified: 2012/05/21 22:28 by niccolo