PHP bietet zwei magische Referenzfunktionen, magic_quotes_gpc und magic_quotes_runtime, die für uns praktisch sind, um Daten in Anführungszeichen zu setzen. Wenn diese beiden Funktionen in php.ini auf EIN gesetzt sind, werden sie auf einfache Anführungszeichen, doppelte Anführungszeichen und Backslashes für die von uns zitierten Daten stoßen Zeile wird automatisch mit einem Backslash hinzugefügt, um uns bei der automatischen Übersetzung von Symbolen zu helfen und den korrekten Betrieb von Datenoperationen sicherzustellen. Unter verschiedenen PHP-Versionen oder unterschiedlichen Serverkonfigurationen sind jedoch einige magic_quotes_gpc und magic_quotes_runtime auf „on“ und andere auf „on“ gesetzt . aus, also muss das Programm, das wir schreiben, sowohl die Ein- als auch die Aus-Bedingungen erfüllen. Was ist also der Unterschied zwischen den Funktionen magic_quotes_gpc und
magic_quotes_runtime
?
Zeitpunkt der Aktion: Die Anfrage startet, beispielsweise wenn das Skript ausgeführt wird.
Magic_quotes_runtime
-Bereich: Aus einer Datei gelesene Daten oder das Ergebnis der Ausführung von exec() oder aus einer SQL-Abfrage erhalten;
Aktionszeit: jedes Mal, wenn das Skript auf Daten zugreift, die im laufenden Zustand generiert wurden.
Daher wirkt sich der Einstellungswert von magic_quotes_gpc auf die über Get/Post/Cookies erhaltenen Daten aus; der Einstellungswert von magic_quotes_runtime wirkt sich auf die aus der Datei gelesenen Daten oder die aus der Datenbankabfrage erhaltenen Daten aus.
Beispiel:
<form action="" method="post" >
STR:<Eingabetyp="text" name="str">
<Eingabetyp="submit">
</form>
<?php
/* Wir füllen das Formular aus: '" Diese Symbole werden, wenn magic_quotes_gpc nicht aktiviert ist, nicht durch Backslashes maskiert*/
echo 'Der durch POST übergebene Wert ist:' ,$_POST['str'], '<br />';
if (get_magic_quotes_gpc()) { // Überprüfen Sie, ob magic_quotes_gpc aktiviert ist. Wenn nicht, verwenden Sie Addslashes zum Konvertieren gerecht
$str = $_POST['str'];
} anders {
$str = addslashes($_POST['str']);
}
echo 'Hier ist die maskierte Version:' ,$str, '<hr />';
$sql = "INSERT INTO lastnames (lastname) VALUES ('$str')";
//========================== = ============================================== = ======
//-----magic_quotes_gpc entkommt nur: www.devdao.com- Daten, die über Get/Post/Cookies abgerufen wurden
//-----magic_quotes_runtime wird entkommen: aus einer Datei gelesene Daten oder das Ergebnis der Ausführung von exec() oder aus einer SQL-Abfrage erhalten
//============================================= ====================================
$data = implode(file('try.php')); // Wir schreiben zum Testen noch die Zeichen '" hinein
echo 'Hier sind die Daten von try.php,';
if (get_magic_quotes_runtime()) {
$data = $data;
echo 'vom System entkommen' .$data;
} anders {
echo 'escaped by addslashes' .$data = addslashes($data);
}
$sql = "INSERT INTO lastnames (lastname) VALUES ('$data')";
echo '<br />SQL-Anweisung ist:<br />' ,$sql;
//---Beim Betreten der Datenbank wird alles mit Escapezeichen versehen, aber es gibt zusätzliche Backslashes. Wenn wir die Originaldaten lesen möchten, verwenden Sie Stripslashes(), um die Backslashes zu entfernen.
//---stripslashes() und addslashes() haben gegensätzliche Wirkungen
?>Der kritischste Unterschied besteht in den beiden oben genannten Punkten: Der Einstellungswert von magic_quotes_gpc wirkt sich auf die über Get/Post/Cookies erhaltenen Daten aus. Der Einstellungswert von magic_quotes_runtime wirkt sich auf das Lesen aus der Datei aus Erhaltene oder aus der Datenbankabfrage erhaltene Daten werden hier übrigens erwähnt: set_magic_quotes_runtime: Setzen Sie den Wert „magic_quotes_runtime“ auf 0=off 1=on. Sie können „echo phpinfo()“ verwenden. ): Überprüfen Sie den magic_quotes_gpc-Wert. 0 = Schließen. 1 = Öffnen. get_magic_quotes_runtime (): Überprüfen Sie den magic_quotes_runtime-Wert. 0=aus. 1=ein. Beachten Sie, dass es keine set_magic_quotes_gpc()-Funktion gibt, d. h. der Wert von magic_quotes_gpc kann nicht im Programm festgelegt werden.