Signatur
Beschreibung
get_magic_quotes_gpc() lieferte historisch den Wert der PHP-Konfigurationsoption magic_quotes_gpc. War diese Option aktiv, fügte PHP automatisch Backslashes vor Sonderzeichen (', ", \, NUL) in den superglobalen Arrays $_GET, $_POST und $_COOKIE ein.
Seit PHP 5.4.0 ist magic_quotes_gpc fest deaktiviert und kann nicht mehr eingeschaltet werden. Die Funktion get_magic_quotes_gpc() gibt daher seit PHP 5.4 immer false zurück. Ab PHP 7.4 wurde sie als deprecated markiert, und ab PHP 8.0 wurde sie vollständig entfernt.
In Legacy-Code wurde get_magic_quotes_gpc() oft verwendet, um vor dem Verarbeiten von Benutzereingaben zu prüfen, ob ein stripslashes() notwendig ist. Dieser Ansatz gilt heute als überholt und unsicher. Stattdessen sollte man vorbereitete Datenbankabfragen (Prepared Statements) und kontextgerechtes Escaping verwenden.
Neuer Code sollte diese Funktion nicht mehr verwenden. Falls noch alter PHP-5-Code portiert wird, sollte jegliche Abhängigkeit von magic_quotes_gpc vollständig entfernt werden.
Rückgabewert
magic_quotes_gpc-Einstellung zurück (true oder false). Ab PHP 5.4 immer false. In PHP 8.0+ existiert die Funktion nicht mehr und führt zu einem fatalen Fehler.Beispiele
Legacy-Kompatibilitätsprüfung für alte Codebasen
<?php
// Dieser Code-Stil findet sich in alten Anwendungen — NICHT für neue Projekte empfohlen
if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
// Magic Quotes waren aktiv: Backslashes aus Benutzereingaben entfernen
$input = stripslashes($_POST['username'] ?? '');
} else {
$input = $_POST['username'] ?? '';
}
// Moderner, sicherer Ansatz: Prepared Statements nutzen, kein manuelles Escaping
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
$stmt->execute([':username' => $input]);
$user = $stmt->fetch();
Prüfung ob Funktion noch existiert (PHP 7/8 Kompatibilität)
<?php
// Sichere Prüfung, ob die Funktion überhaupt noch vorhanden ist
if (function_exists('get_magic_quotes_gpc')) {
$mqg = get_magic_quotes_gpc();
echo 'magic_quotes_gpc ist ' . ($mqg ? 'aktiviert' : 'deaktiviert') . PHP_EOL;
} else {
// PHP 8.0+: Funktion existiert nicht mehr, magic_quotes_gpc ist nie aktiv
echo 'magic_quotes_gpc wird nicht unterstützt (PHP 8.0+)' . PHP_EOL;
}
// Wichtig · Fallstricke
Deprecated seit PHP 7.4, entfernt in PHP 8.0. Jeder Aufruf von get_magic_quotes_gpc() in PHP 7.4 erzeugt eine E_DEPRECATED-Warnung. In PHP 8.0+ führt der Aufruf zu einem fatalen Error (undefined function).
Sicherheitshinweis: Das Verlass auf magic_quotes_gpc zur SQL-Injection-Prävention ist grundsätzlich unsicher. Die einzig zuverlässige Methode sind Prepared Statements mit PDO oder MySQLi. Für die Ausgabe in HTML ist htmlspecialchars() zu verwenden.
Alte Codeteile, die stripslashes() abhängig von get_magic_quotes_gpc() aufrufen, sollten vollständig überarbeitet werden, da sie in modernen PHP-Versionen doppelte Escaping-Probleme verursachen können, wenn falsche Annahmen getroffen werden.