парсинг строки в PHP - PullRequest
       13

парсинг строки в PHP

1 голос
/ 24 февраля 2011

я получил строку в следующем формате:

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";}

Мне нужно проанализировать записи в кавычках и получить массив, подобный этому:

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

$testarray[1]['key'] = "userID";
$testarray[1]['value'] = "25";

и т. Д....

Нет, я не пытаюсь взломать какие-либо сессии;) Я использую Uploadify с Codeigniter, и мне нужно убедиться, что пользователю разрешено загружать файлы, основываясь на его сеансе.Я не могу использовать функции сеанса Codeigniter, так как Uploadify создает свой собственный сеанс для Upload-PHP-Script.Поэтому я передаю session_id как Uploadify scriptdata, а затем я ищу session_id в таблице ci_sessions, чтобы самостоятельно проанализировать необходимые пользовательские данные сеанса.

Может быть, кто-то также знает лучшее решение для этого?;)

Ответы [ 3 ]

6 голосов
/ 24 февраля 2011
$params = unserialize($string);

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

См. unserialize документация.


ОБНОВЛЕНИЕ. Вы также можете наследовать / patch sess_read() из system / library / Session.php, чтобы он принимал пользовательский идентификатор сессии:

До:

function sess_read() {
  ...
  // Unserialize the session array
  $session = $this->_unserialize($session);
  ...
}

После того, как:

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

Также не забудьте установить sess_match_useragent = false в файле конфигурации сеанса, в противном случае запрос от Uploadify будет отклонен, поскольку пользовательский агент Flash отличается от пользовательского агента брокера.

А теперь вы можете загрузить любую сессию по ID:

$this->session->sess_read($custom_session_id)

Гораздо меньше взлома, чем анализ данных из БД вручную.

2 голосов
/ 24 февраля 2011

Я думаю, вы ищете unserialize()

http://php.net/manual/en/function.unserialize.php

1 голос
/ 24 февраля 2011

полный код

<?php

$s = '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";}';

$final = array();
foreach (unserialize($s) as $k => $v) {
    $final[] = array('key' => $k, 'value' => $v);
} 

var_dump($final);
...