• php中序列化与反序列化


    http://www.cnblogs.com/A-Song/archive/2011/12/13/2285619.html

    转自:http://qing.weibo.com/tag/unserialize

    把复杂的数据类型压缩到一个字符串中

    serialize() 把变量和它们的值编码成文本形式
    unserialize() 恢复原先变量
    eg:
    $stooges = array('Moe','Larry','Curly');
    $new = serialize($stooges);
    print_r($new);echo "<br />";
    print_r(unserialize($new));
    结果:a:3:{i:0;s:3:"Moe";i:1;s:5:"Larry";i:2;s:5:"Curly";}
    Array ( [0] => Moe [1] => Larry [2] => Curly )
    当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
    $shopping = array('Poppy seed bagel' => 2,'Plain Bagel' =>1,'Lox' =>4);
    echo '<a href="next.php?cart='.urlencode(serialize($shopping)).'">next</a>';
    margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。
    如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
    $new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
    $new_cart = unserialize($cart);
    如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
    复制代码
    $fp = fopen('/tmp/cart','w');
    fputs($fp,addslashes(serialize($a)));
    fclose($fp);
    //如果magic_quotes_runtime开启
    $new_cat = unserialize(stripslashes(file_get_contents('/tmp/cart')));
    //如果magic_quotes_runtime关闭
    $new_cat = unserialize(file_get_contents('/tmp/cart'));
    在启用了magic_quotes_runtime的情况下,从数据库中读取序列化的数据也必须经过stripslashes()的处理,保存到数据库中的序列化数据必须要经过addslashes()的处理,以便能够适当地存储。
    mysql_query("insert into cart(id,data) values(1,'".addslashes(serialize($cart))."')");
    $rs = mysql_query('select data from cart where id=1');
    $ob = mysql_fetch_object($rs);
    //如果magic_quotes_runtime开启
    $new_cart = unserialize(stripslashes($ob->data));
    //如果magic_quotes_runtime关闭
    $new_cart = unserialize($ob->data);
    复制代码
    当对一个对象进行反序列化操作时,PHP会自动地调用其__wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。
  • 相关阅读:
    Python学习札记(十五) 高级特性1 切片
    LeetCode Longest Substring Without Repeating Characters
    Python学习札记(十四) Function4 递归函数 & Hanoi Tower
    single number和变体
    tusen 刷题
    实验室网站
    leetcode 76. Minimum Window Substring
    leetcode 4. Median of Two Sorted Arrays
    leetcode 200. Number of Islands 、694 Number of Distinct Islands 、695. Max Area of Island 、130. Surrounded Regions 、434. Number of Islands II(lintcode) 并查集 、178. Graph Valid Tree(lintcode)
    刷题注意事项
  • 原文地址:https://www.cnblogs.com/kenshinobiy/p/4389474.html
Copyright © 2020-2023  润新知