Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    problema con register_globals On

    Ho un sito su un server dove è impostato nel php.ini la direttiva register_globals On. Le variabili così generate in modo automatico causano dei malfunzionamenti degli script.
    Ho provato con un file .htaccess e con il php_flag:
    php_flag register_globals Off
    ma non ho risolto il problema in quanto mi da un errore. A quanto pare non è possibile cambiare questa direttiva con il file .htaccess sul server dove risiede il mio sito (non è consentito).
    Inoltre mi pare che con il comando ini_set() non si riesce a modificare la direttiva register_globals, come è ben spiegato sul manuale php.
    Non mi resta che agire manualmente aggiungendo qualche riga di codice all'inizio di ogni pagina in modo tale da cancellare le variabili generate automaticamente.
    Ma come fare?
    L'idea era qualcosa del genere:
    if ((int)ini_get('register_globals') === 1){
    foreach $variabile tale che non sia una variabile $_POST o $_GET
    unset($variabile);
    }
    Ma come implementare questa operazione materialmente?
    E poi è sicuro che così non cancello altre variabili (sessioni ecc.) vitali?
    Grazie

  2. #2
    Non capisco bene il tuo problema. Se registr_globals = ON e dal form ti vengono inviati, mettiamo con method=POST, alcuni input, tu li troverai sia nell'array $_POST[name] che in $name. Se invece register_globals = OFF li troveresti "solo" in $_POST[name].

    Quindi se fai il tuo script ignorando la variabile ricevuta con register_globals in ON, questa non ti dara' alcun fastidio. In pratica sviluppa come se le register_globals fossero in OFF.

    Sempre che abbia capito a cosa ti riferisci.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Intanto grazie per la risposta.
    Quello che dici tu è corretto, e infatti non mi preoccupa.
    Il problema sussiste quando hai delle pagine progettate già per lavorare con il register_globals Off, nel mio caso particolare contengono forms che richiamano sempre la stessa pagina.
    Per esempio se scrivo:
    if (isset($var)) {fai questo}
    mi aspetto che $var dopo che la pagina è stata caricata (in seguito all'invio del form) non esista più, e invece con register_globals On la variabile $var esisterà sempre.
    Potrei risolvere il problema se riscrivessi il codice nelle parti che causano problemi, ma questo è un lavoro piuttosto oneroso.
    Dunque pensavo che esistesse un metodo per cancellare all'inizio delle script solo le variabili generate automaticamente dalla direttiva register_globals On e non tutte le altre inviate dai vari forms.
    Ecco perchè pensavo (se possibile) di inserire in testa ad ogni pagina qualcosa del genere:
    if ((int)ini_get('register_globals') === 1){
    foreach $variabile tale che non sia una variabile $_POST o $_GET
    unset($variabile);
    }

  4. #4
    prova a fare un
    print_r($GLOBALS);
    vedi se riesci a lavorare tramite quello

  5. #5
    foreach attraversa solo gli array. Per assurdo potresti azzerare $_POST & C. ma non una variabile.

    Si potrebbe provare ad estrarre il nome della variabile tramite un foreach su $_POST ..... mai provato, e' un'idea del momento.. vediamo ... qualcosa tipo:
    codice:
    foreach ($_POST as $key => $value) {
      if(isset($$key)) {
         unset($$key);
         echo "$$key eliminata
    ";
       }
    }
    Da provare ma dovrebbe funzionare. In pratica prende la chiave di POST e la usa per definire la variabile con stesso nome da eliminare.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Funziona!
    Alla fine ho inserito in testa ad ogni pagina questo codice:
    codice:
    if ((int)ini_get('register_globals') === 1){ 
    	foreach ($_POST as $key => $value) {
    		if(isset($$key)) {
    			unset($$key);
    		}
    	}
    	foreach ($_GET as $key => $value) {
    		if(isset($$key)) {
    			unset($$key);
    		}
    	}
    }
    Per il momento tutto sembra ok.
    grazie per il prezioso aiuto.

  7. #7
    Ok. me la segno pure io questa soluzione.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.