在PHP中解析String

seb*_*ian 1 php string parsing codeigniter uploadify

我得到了一个以下格式的字符串:

a:5:{s:21:"securimage_code_value";s:4:"4l7z";s:6:"userID";s:2:"25";s:8:"username";s:6:"lupoxy";s:10:"angemeldet";s:4:"true";s:9:"user_role";s:3:"111";}
Run Code Online (Sandbox Code Playgroud)

我需要解析引号中的条目,并得到这样的数组:

$testarray[0]['key'] = "securimage_code_value";
$testarray[0]['value'] = "417z";

$testarray[1]['key'] = "userID";
$testarray[1]['value'] = "25";
Run Code Online (Sandbox Code Playgroud)

等等...

不,我不是试图破解任何会话;)我正在使用上传与Codeigniter,我需要验证,允许用户根据他的会话上传.我无法使用Codeigniter会话功能,因为Uploadify为Upload-PHP-Script创建了自己的会话.所以我将session_id作为Uploadify脚本数据传递,然后我在ci_sessions表中查找session_id,以自己解析所需的会话userdata.

也许有人知道更好的解决方案吗?;)

Ale*_*dev 6

$params = unserialize($string);

$testarray = array();
foreach($params as $key => $value) {
   $testarray[]= compact('key', 'value');
}
Run Code Online (Sandbox Code Playgroud)

请参阅反序列化文档.


UPDATE.您还可以sess_read()从system/libraries/Session.php 继承/ patch 以使其接受自定义会话ID:

之前:

function sess_read() {
  ...
  // Unserialize the session array
  $session = $this->_unserialize($session);
  ...
}
Run Code Online (Sandbox Code Playgroud)

后:

function sess_read($session_id = null) {
  ...
  // Unserialize the session array
  $session = $this->_unserialize($session);
  if ($session_id) $session['session_id'] = $session_id;
  ...
}
Run Code Online (Sandbox Code Playgroud)

还记得sess_match_useragent = false在会话配置文件中设置,否则将拒绝来自Uploadify的请求,因为Flash的用户代理与broswer的用户代理不同.

现在您可以按ID加载任何会话:

$this->session->sess_read($custom_session_id)
Run Code Online (Sandbox Code Playgroud)

比手动解析数据库中的数据要少得多.