FAQ
PHP Manual

Verschiedene Fragen

Es gibt diverse Fragen, die in keine andere Kategorie passen. Diese Fragen finden Sie hier.

  1. Wie entpacke ich Manuals unter Windows, die mit bz2 komprimiert wurden?
  2. Was bedeutet & vor einem Parameter in eine Funktionsdeklarations wie z.B. bei asort()?
  3. Wie gehe ich mit register_globalsi um?

Wie entpacke ich Manuals unter Windows, die mit bz2 komprimiert wurden?

Wenn Sie keinen Entpacker haben, der bz2 entpacken kann, » laden Sie sich das Kommandozeilenprogramm von Redhat herunter (siehe Informationen weiter unten).

Wenn Sie nicht das Kommandozeeilenprogramm verwenden wollen, dann können Sie kostenlose Tools wie den » Stuffit Expander, » UltimateZip, » 7-Zip, oder » Quick Zip verwenden. Wenn Sie » WinRAR oder » Power Archiver haben, können Sie die bz2 Dateien damit entpacken. Sollten Sie Total Commander (ehemals Windows Commander) verwenden, so gibt es dafür ein kostenloses bz2 Plugin auf der » Total Commander Seite.

Das bzip2 Kommandozeilenprogramm von Redhat:

Benutzer von Win2k SP2 verwenden die aktuelle Version 1.0.2, alle anderen Windows-Benutzer sollten Version 1.00 nehmen. Nach dem Download sollten Sie die Datei in bzip2.exe umbenennen. Kopieren Sie diese zur leichteren Handhabung in ein Verzeichnis im Windows-Pfad, z.B. C:\Windows, wobei C: das Laufwerk Ihrer Windows Installation ist.

Anmerkung: lang steht für die Sprache und x für das Format, z.B. pdf. Zum entpacken von php_manual_lang.x.bz2 folgen Sie diesen einfachen Schritten:

  • Öffenen Sie die Eingabeaufforderung
  • Springen Sie mit cd in das Verzeichnis, in dem Sie die heruntergeladene Datei php_manual_lang.x.bz2 gespeichert haben
  • Mit bzip2 -d php_manual_lang.x.bz2, entpacken Sie die Datei php_manual_lang.x im selben Verzeichnis

Wenn Sie die Datei php_manual_lang.tar.bz2 heruntergeladen haben, die viele HTML-Dateien enthält, gehen Sie genauso vor. Der einzige Unterschied ist, dass Sie eine Datei namens php_manual_lang.tar erhalten. Die meisten Entpacker unter Windows verstehen das tar Format wie z.B. » WinZip.

Was bedeutet & vor einem Parameter in eine Funktionsdeklarations wie z.B. bei asort()?

Es bedeutet das eine Variable als Referenz übergeben wird und die Funktion höchstwahrscheinlich den Inhalt der übergebenen Variablen gemäß ihrem dokumentierten Zweck verändern wird. Sie können solchen Parameter nur Variablen übergeben und Sie müssen dem Parameter im Funktionsaufruf kein & vorausstellen (dieses Vorgehen ist sogar veraltet).

Wie gehe ich mit register_globalsi um?

Informationen zu den sicherheitsrelevanten Aspekten von register_globals finden Sie im Sicherheitskapitel unter Nutzung von register_globals.

Es wird empfohlen die Superglobalen Variablen zu benutzen und sich nicht darauf zu verlassen das register_globals aktiviert ist.

Wenn Sie auf einem Shared Host alte Applikationen einsetzen müssen die erwarten das register_globals aktiv ist obwohl es abgeschaltet ist oder wenn es aktiv ist, Sie aber die damit verbundenen Sicherheitsrisiken vermeiden wollen dann müssen Sie eventuell die jeweils andere Einstellung mit PHP emulieren. Es empfiehlt sich jeweils zunächst nachzufragen ob die Einstellungen irgendwie geändert werden können, ist dies aber nicht möglich so können Sie die folgenden Kompatibilitätsbausteine verwenden.

Beispiel #1 Register Globals emulieren

Der folgende Code emuliert register_globals=On. Wenn Sie die variables_order Konfiguration ändern sollten Sie in der Regel auch die $superglobals entsprechend anpassen.

<?php
// Emulate 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);
    }
}
?>

Der folgende Code emuliert register_globals=Off. Beachten Sie das dieser Code entweder direkt am Anfang Ihres Scripts ausgeführt werden sollte oder nach dem Aufruf von session_start() wenn Sie damit Ihre Sessions starten.

<?php
// Emulate 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