Subversion Repositories php-qbpwcf

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3 liveuser 1
<?php
2
namespace Ratchet\Session\Serialize;
3
 
4
class PhpHandler implements HandlerInterface {
5
    /**
6
     * Simply reverse behaviour of unserialize method.
7
     * {@inheritdoc}
8
     */
9
    function serialize(array $data) {
10
        $preSerialized = array();
11
        $serialized = '';
12
 
13
        if (count($data)) {
14
            foreach ($data as $bucket => $bucketData) {
15
                $preSerialized[] = $bucket . '|' . serialize($bucketData);
16
            }
17
            $serialized = implode('', $preSerialized);
18
        }
19
 
20
        return $serialized;
21
    }
22
 
23
    /**
24
     * {@inheritdoc}
25
     * @link http://ca2.php.net/manual/en/function.session-decode.php#108037 Code from this comment on php.net
26
     * @throws \UnexpectedValueException If there is a problem parsing the data
27
     */
28
    public function unserialize($raw) {
29
        $returnData = array();
30
        $offset     = 0;
31
 
32
        while ($offset < strlen($raw)) {
33
            if (!strstr(substr($raw, $offset), "|")) {
34
                throw new \UnexpectedValueException("invalid data, remaining: " . substr($raw, $offset));
35
            }
36
 
37
            $pos     = strpos($raw, "|", $offset);
38
            $num     = $pos - $offset;
39
            $varname = substr($raw, $offset, $num);
40
            $offset += $num + 1;
41
            $data    = unserialize(substr($raw, $offset));
42
 
43
            $returnData[$varname] = $data;
44
            $offset += strlen(serialize($data));
45
        }
46
 
47
        return $returnData;
48
    }
49
}