php中magic_quotes_gpc对unserialize的影响分析_PHP
本文实例分析了php中magic_quotes_gpc对unserialize的影响。分享给大家供大家参考。具体如下:
magic_quotes_gpc是一个php中一个给单双引号增加一些安全过滤的函数,但此函数对于我们使用unserialize函数时会产生一些影响,下面我们就这个问题与大家看几个实例与解决办法.
昨天朋友让我帮他解决下他网站的购物车程序的问题,程序用的是PHPCMS,换空间前是好的,刚换的空间,具体问题是提示成功加入购物车后跳转到购物车页面,购物车里为空.
我看了下代码,大致的原理就是将产品ID与数量存放到数组中,然后序列化后存入COOKIE中,在购物车页面反序列化COOKIE,得到这个数组并读出对应产品信息.
调试一下发现问题出现在unserialize上,我先根据它的购物车原理写了段代码,代码如下:
代码如下:
header("Content-type: text/html; charset=utf-8");
$magic = get_magic_quotes_gpc() ? "开启" : "未开启";
$str = array(array('goods_id'=>13,'number'=>1));
setcookie("cart", serialize($str));
echo "magic_quotes_gpc: ".$magic."
";
echo $_COOKIE['cart']."
";
print_r(unserialize($_COOKIE['cart']));
?>
大家执行下这段代码可以发现,当你的magic_quotes_gpc关闭时这段程序执行没有任何问题,但是magic_quotes_gpc开启时你会发现反序列化并不成功,这时你可能就知道问题出在哪了?
原因是magic_quotes_gpc开启时,系统会自动对POST GET COOKIE的结果中的单引号进行转义,加上\,所以$_COOKIE['cart']的值就变成了a:1:{i:0;a:2:{s:8:\"goods_id\";i:13;s:6:\"number\";i:1;}},这样的话unserialize是无法反序列化成功的,就出现了问题.
解决的办法简单来说就是将unserialize($_COOKIE['cart'])改成unserialize(stripslashes($_COOKIE['cart'])),在COOKIE前加上stripslashes,去掉转义符,这样就没问题了.
对于cookie影响我们再做个测试:
1.问题:项目数据需要序列化保存在cookie中,然后再获得cookie的数据反序列,获得原数据,代码如下:
代码如下:
$a[0] = array("key"=>"哈 逻");
$a[1] = array("key"=>"哈 逻");
$jsona = json_encode($a);
setcookie("testcookie","");
setcookie("testcookie",$jsona);
var_dump($jsona,true); //正常取值
var_dump(json_decode($_COOKIE['testcookie'],true)); //取不到值
在没有经过cookie赋值时,正常反序列化,经过cookie之后,取到值为空.
2.分析,代码如下:
代码如下:
$a[0] = array("key"=>"哈 逻");
$a[1] = array("key"=>"哈 逻");
$jsona = json_encode($a);
var_dump($jsona); //string(50) "[{"key":"\u54c8 \u903b"},{"key":"\u54c8 \u903b"}]"
setcookie("testcookie","");
setcookie("testcookie",$jsona);
var_dump($_COOKIE['testcookie']); // string(62) "[{\"key\":\"\\u54c8 \\u903b\"},{\"key\":\"\\u54c8 \\u903b\"}]"
var_dump(json_decode($_COOKIE['testcookie'],true));
对比了一下数据,经过cookie处理后多了几个//,解决方法,代码如下:
代码如下:
var_dump(json_decode(stripslashes($_COOKIE['testcookie']),true));
var_dump(json_decode(str_replace("\\","",$_COOKIE['testcookie']),true));
3.总结:magic_quotes_gpc在开启的情况下,会影响通过get|post|cookies获得的数据.所以我们在get|post|cookies处理数据的时候,首先判断magic_quotes_gpc开启情况.
① 在开启情况下,处理数据需要stripslashes
② 在没有开启情况下,接受数据先addslashes,处理数据stripslashes
希望本文所述对大家的PHP程序设计有所帮助。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



In diesem Kapitel werden wir die Umgebungsvariablen, die allgemeine Konfiguration, die Datenbankkonfiguration und die E-Mail-Konfiguration in CakePHP verstehen.

PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

Das Arbeiten mit der Datenbank in CakePHP ist sehr einfach. In diesem Kapitel werden wir die CRUD-Operationen (Erstellen, Lesen, Aktualisieren, Löschen) verstehen.

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

In diesem Kapitel lernen wir die folgenden Themen im Zusammenhang mit dem Routing kennen.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.
