FAQ
PHP Manual

Domande varie

Ci sono diverse domande che ricorrono frequentemente ma che non possono essere inserite in una delle categorie principali: eccole riunite in questa sezione.

  1. Come posso gestire i file compressi bz2 sotto Windows?
  2. Cosa significa il simbolo & davanti agli argomenti nelle dichiarazione di funzioni come, ad esempio, asort?
  3. Come gestisco i register_globals?
Come posso gestire i file compressi bz2 sotto Windows?

Se non si ha un software in grado di estrarre gli archivi bz2, si scarichi » questo programma a riga di comando per RedHat (leggi più sotto per maggiori informazioni).

Se non si vuole usare la riga di comando, si può scaricare uno di questi software gratuiti: » Stuffit Expander, » UltimateZip, » 7-Zip o » Quick Zip. Se si possiede già dei software tipo » WinRAR o » Power Archiver, si possono gestire senza problemi gli archivi bz2. Se si usa Total Commander (un tempo Windows Commander), sul sito » Windows Commander è disponibile un plugin gratuito per gestire i file bz2.

Programma a riga di comando per RedHat:

Gli utenti Sp2 Win2k possono scaricare l'ultima versione, la 1.0.2, tutti gli altri utenti Windows devono scaricare la versione 1.00. Dopo aver scaricato il file, rinominarlo in bzip2.exe. Per maggiore comodità, si consiglia di copiare questo file in una cartella del tuo hard disk principale, per esempio C:\Windows (dove C rappresenta la lettera del tuo hard disk).

Nota: 'lang' indica la tua lingua e x il formato desiderato, per esempio pdf. Per decomprimere il file php_manual.x.bz2 seguire queste semplici istruzioni:

  • Aprire il prompt dei comandi di Windows
  • Entrare nella cartella che contiene il file php_manual_lang.x.bz2 (cd nome_cartella)
  • digitare bzip2 -d php_manual_lang.x.bz2 per estrarre il file nella stessa cartella

Nel caso si sia scaricato il manuale php_lang.tar.bz2 nel formato contenente molti file HTML, la procedura sarà la stessa. La sola differenza è che hai scaricato un file *.tar. Il formato *.tar è famoso perché viene riconosciuto dalla maggior parte dei software di archiviazione per Windows, per esempio » WinZip.

Cosa significa il simbolo & davanti agli argomenti nelle dichiarazione di funzioni come, ad esempio, asort()?

Significa che l'argomento è passato per riferimento e la funzione può modificarlo, come specificato nella documentazione. In questo modo si possono solo passare variabili e non occorre scrivere & nella chiamata (è persino deprecato).

Come gestisco i register_globals?

Per informazione sulle implicazioni di sicurezza dei register_globals, leggere il capitolo sulla sicurezza sull' Uso dei register_globals.

Si preferisce utilizzare i superglobals, piuttosto che basarsi sui register_globals.

Se si è su un host condiviso con register_globals spenti e si ha bisogno di usare delle applicazioni particolari che li richiedono attivi, o se si è su un server in hosting con questa opzione attiva, ma ma si vogliono eliminare rischi di sicurezza, si può emulare l'impostazione corretta con PHP. Ovviamente è sempre un'ottima idea chiedere se è possibile cambiare l'opzione nella configurazione di PHP, ma se ciò non è possibile, si possono usare queste snippet di compatibilità.

Example #1 Emulazione dei Register Globals

Questo emula register_globals On. Se è stata modificata la direttiva variables_order, si valuti di cambiare la $superglobals di conseguenza.

<?php
// Emulazione di register_globals on
if (!ini_get('register_globals')) {
    
$superglobals = array($_SERVER$_ENV,
        
$_FILES$_COOKIE$_POST$_GET);
    if (isset(
$_SESSION)) {
        
array_unshift($superglobals$_SESSION);
    }
    foreach (
$superglobals as $superglobal) {
        
extract($superglobalEXTR_SKIP);
    }
}
?>

Questo codice emula register_globals Off. Si ricordi che questo codice deve essere chiamato all'inizio dello script, oppure dopo session_start() se lo si usa per iniziare la sessione.

<?php
// Emulazione di register_globals off
function unregister_GLOBALS()
{
    if (!
ini_get('register_globals')) {
        return;
    }

    
// Might want to change this perhaps to a nicer error
    
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
        die(
'GLOBALS overwrite attempt detected');
    }

    
// Variables that shouldn't be unset
    
$noUnset = array('GLOBALS',  '_GET',
                     
'_POST',    '_COOKIE',
                     
'_REQUEST''_SERVER',
                     
'_ENV',     '_FILES');

    
$input array_merge($_GET,    $_POST,
                         
$_COOKIE$_SERVER,
                         
$_ENV,    $_FILES,
                         isset(
$_SESSION) && is_array($_SESSION) ? $_SESSION : array());
    
    foreach (
$input as $k => $v) {
        if (!
in_array($k$noUnset) && isset($GLOBALS[$k])) {
            unset(
$GLOBALS[$k]);
        }
    }
}

unregister_GLOBALS();

?>


FAQ
PHP Manual