作者:手机用户2502859861 | 来源:互联网 | 2013-06-24 10:42
好吧,我承认我是个标题党~因为我最终检查发现,出错原因与win2003无关,哈哈。首先,服务器的配置是win2003+apache+mysql+php,我要做的呢,就是一个基于cookie的购物车功能。
好吧,我承认我是个标题党~因为我最终检查发现,出错原因与win2003无关,哈哈。
首先,服务器的配置是win2003+apache+mysql+php,我要做的呢,就是一个基于COOKIE的购物车功能。
再本地服务器测试过了,一切正常,结果上传到公司的服务器上,就出问题了,乍一看貌似是由于服务器配置的问题导致COOKIE无法写入。后来经过逐步的调试,发现COOKIE是存在的,但是却没有正常显示罢了。
下面我先说下PHP做购物车的常规思路吧,说白了就是二维数组+COOKIE,或者session也行~不过感觉COOKIE就行了。将相应的商品信息保存至二维数组,没一个数组就是一条产品的信息,包括商品名,价格,购买数量等等,自己想象~然后多种商品就是多个数组,并购物一个二维数组。好了,思路就是这样。下面说下问题的所在。
因为是多维数组,要保存至COOKIE呢,一般就是先序列化(serialize();)一下,然后再写入COOKIE;等到需要调用的时候呢,就再反序列化(unserialize)一下,然后就是一个二维数组了,我们就可以进行购物车的相关增删改等操作了。我的问题出在了反序列化这一步。因为我已经可以确认COOKIE存在,且serialize()与unserialize() 这2个函数存在(可以用function_exists() 来检测)。所以呢,重点放在unserialize();函数。经检测,发现这个函数不起作用,也就是无法得到正确的二维数组信息。我将序列化后的信息输出,发现里面多了很多反斜线。到此为止,一眼就可以看出问题的所在了吧。再一检测,果然不出所料,服务器开启了magic quotes gpc。怎么办?关闭吗?没有必要,况且这也是PHP的一项安全措施。
自己加个判断就行了,举例如下:
-
php
-
if(get_magic_quotes_gpc()){
-
//如果开启了魔术引号则手动过滤
-
$mycart = unserialize(stripslashes($_COOKIE['mycart']));
-
}else{
-
//没有开启的话则一定不要再去除了
-
$mycart = unserialize($_COOKIE['mycart']);
-
}
-
?>
OK,这样就可以解决了。至于stripslashes(); 及 addslashes(); ,不明白的自己百度一下。