Portal > Foren > PHP > PHP-Programmierung > register globals sauber killen ?
Antwort
 
Themen-Optionen
Alt 31.12.2005, 15:00 Nach oben    #1
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard register globals sauber killen ?

PHP-Code:
function kill_register_globals()
{
    if (!isset(
$_SESSION) OR (isset($_SESSION) AND !is_array($_SESSION)))
    { 
        
$_SESSION = array();
    }
    
$dump array_merge($_REQUEST,$_COOKIE,$_SESSION,$GLOBALS,$_FILES,$_ENV,$_SERVER);
    foreach (
$dump as $key=>$value)
    {
        unset(
$GLOBALS[$key]);
    }
}
kill_register_globals(); 
$_POST und $_GET brauche ich ja nicht, weil ich $_REQUEST habe.

gehts schneller und einfacher ?

btw warum geht folgendes nicht, steh ich da irgendwo aufm schlauch ? wird da nur der in killtest() gültige Zeiger auf $test gelöscht ? weil wenn ich das kommentarzeichen vor #$test = 'bla'; wegmache, hab ich am ende in $test "bla" stehen und nicht "blub" .... . Warum aber wird nicht die ganze Variable gekillt, ist das so ? liegt das an ner Einstellung meiner php.ini ? ist ein Xampp mit 5.0.5, phpinfo kann ich notfalls nachreichen. Bug ? Feature ?

man nehme ein Script mit folgendem Code:
PHP-Code:
<?php
error_reporting
(E_ALL);

function 
killtest(){
    echo 
'test: "'.$test.'" vor global $test<br />';
    global 
$test;
    echo 
'test: "'.$test.'" nach global $test;<br />';
    
#$test = 'bla';
    
unset($test);
    echo 
'test: "'.$test.'" nach unset($test);<br />';
}
killtest();

echo 
'test: "'.$test.'" am ende des Scripts<br />';
und rufe es mit script.php?test=blub auf


mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.12.2005, 15:58 Nach oben    #2
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

Naja Frage 2 hat sich nach einiger Recherche dann doch geklärt

ein RTFM an mich selbst

www.php.net/unset

Zitat:
If a globalized variable is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called.

PHP-Code:
<?php
function destroy_foo() 
{
    global 
$foo;
    unset(
$foo);
}

$foo 'bar';
destroy_foo();
echo 
$foo;
?>

The above example will output:


Code:
bar
If you would like to unset() a global variable inside of a function, you can use the $GLOBALS array to do so:

PHP-Code:
<?php
function foo() 
{
    unset(
$GLOBALS['bar']);
}

$bar "something";
foo();
?>
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 07:47 Nach oben    #3
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

oder aber:

PHP-Code:
        <?
/* 
 * 
 * - filename       unregister_globals 
 * - autor          J33d3X 
 * - contact        info[at]swbulletin[dot]de 
 * - modified       22.06.2005 
 * 
 */ 

error_reporting(E_ALL); 

function unregister_globals () 

   // Sichern der Daten 
   $REQUEST     = $_REQUEST; 
   $GET         = $_GET; 
   $POST        = $_POST; 
   $COOKIE      = $_COOKIE; 
   $FILES       = $_FILES; 
   $ENV         = $_ENV;   
   $SERVER      = $_SERVER; 
    
   // $_SESSSION nur dann kopieren, wenn vorhanden 
   $SESSION = isset($_SESSION) ? $_SESSION : FALSE; 
    
   // Loeschen der Daten 
   foreach ($GLOBALS as $schluessel => $wert) 
   { 
      // Das Array enthaelt sich selbst, daher  
      // sollte GLOBALS nicht geloescht werden 
      if ("GLOBALS" != $schluessel) 
      { 
             // Loeschen aller anderen Elemente 
             unset ($GLOBALS[$schluessel]); 
      } 

   } 
    
   // Zurueckschreiben der Daten 
   $_REQUEST    = $REQUEST; 
   $_GET        = $GET; 
   $_POST       = $POST; 
   $_COOKIE     = $COOKIE; 
   $_FILES      = $FILES; 
   $_ENV        = $ENV; 
   $_SERVER     = $SERVER; 
    
   $_SESSION = TRUE == $SESSION ? $SESSION : FALSE; 
}
?>
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";'); 

Geändert von J33d3X (02.01.2006 um 13:24 Uhr).
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 09:21 Nach oben    #4
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.177
Standard

Woher stammen $_INI und $_TPL ?
Sind das irgendwelche von dir speziell benutzen variablen = Oder von irgendeinem Debugger ?

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 13:09 Nach oben    #5
Goldman.de
 
Benutzerbild von J33d3X
 
Registriert seit: 09.10.2005
Ort: Frankfurt am Main
Beiträge: 190
Standard

ups ... ja die könnten raus da das selbst definierte variablen sind
__________________
Code:
eval('echo "'.gzinflate(base64_decode('8zI2TjGOAAA=')).'";'); 
J33d3X ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.01.2006, 15:32 Nach oben    #6
JaGeK
Gast
 
Beiträge: n/a
Standard

Noch eine Möglichkeit:

PHP-Code:
function kill_register_globals()
{
  
$supglob = array('GLOBALS''_POST''_GET''_COOKIE''_FILES',
                   
'_SERVER''_ENV',  '_REQUEST''_SESSION');

  foreach (
$GLOBALS as $key => &$value)
    if (!
in_array($key$supglob))
      unset(
$GLOBALS[$key]);


Geändert von JaGeK (02.01.2006 um 16:11 Uhr).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:56 Uhr.


Powered by vBulletin® Version 3.7.3 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44