Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Помогите разобрать строку

Сообщения:  [1-5] 

 
 автор: Loneliness   (17.12.2008 в 16:09)   письмо автору
 
   для: Loneliness   (17.12.2008 в 15:48)
 

Делаю так:
....
$f_arr = str_replace('s:5:"','i:',$f_arr);
$f_arr = str_replace('";a:2:{',';a:2:{',$f_arr);
.....

Получаю на выходе визуально то что хотел, но как надо не работает таким макаром.... Вероятно, потому что Исходный массив для сериализации не тот что нужен был...

  Ответить  
 
 автор: Loneliness   (17.12.2008 в 15:48)   письмо автору
 
   для: Loneliness   (17.12.2008 в 01:02)
 

В общем, массив записан в файл file.dat. Содержит пароли доступа к директории со сроками их дествия от и до. Моя задача скриптом добавить в этот массив новый пароль со своими сроками действия. Исходный текст в файле:
a:2:{i:1234;a:2:{s:4:"from";i:1229259720;s:2:"to";i:1229346120;}i:7890;a:2{s:4:"from";i:1229459700;s:2:"to";i:1229891700;}}
Я пробую так(пока без записи в файл, вывожу в браузер):
<?
error_reporting
("E_ALL");
function 
generate_password($number)
  {
    
$arr = array('a','b','c','d','e','f',

                 
'g','h','i','j','k','l',

                 
'm','n','p','r','s',

                 
't','u','v','x','y','z',

                 
'A','B','C','D','E','F',

                 
'G','H','I','J','K','L',

                 
'M','N','P','R','S',

                 
'T','U','V','X','Y','Z',

                 
'1','2','3','4','5','6',

                 
'7','8','9');
    
$pass "";
    for(
$i 0$i $number$i++)
    {
      
$index rand(0count($arr) - 1);
      
$pass .= $arr[$index];
    }
    return 
$pass;
  }

$number 5;
$gen_pass generate_password($number);

$date date("Y-m-d H:i:s");  
$date_from strtotime($date);
$date_to $date_from+64800
$file 'file.dat';
$f_arr unserialize(file_get_contents($file));
$put = array(from=>$date_from,to=>$date_to);
$f_arr[$gen_pass] = $put;
$f_arr serialize($f_arr);
echo 
$f_arr;
?>

Получаю на выходе: a:3:{i:111111;a:2:{s:4:"from";i:1229473200;s:2:"to";i:1229473200;}i:33333;a:2:{s:4:"from";i:1229473200;s:2:"to";i:1229473200;}s:5:"HDC7Z";a:2:{s:4:"from";i:1229517433;s:2:"to";i:1229582233;}}[/b]
То есть, сроки действия записало как нужно, а вот сам пароль- не туда. Должно быть:i:HDC7Z; а не s:5:"HDC7Z"; Как организовать $f_arr для сериализации, правильно подскажите?

  Ответить  
 
 автор: Loneliness   (17.12.2008 в 02:42)   письмо автору
 
   для: bronenos   (17.12.2008 в 01:32)
 

Но стандартно, например в блокноте я добавляю новую запись, меняю значение на 1 больше,сохраняю- и все нормально работает, никаких правок более не делаю. Разве не то же самое получится, если обработать сериализованный массив в таком виде и записать строку обратно уже откорректированной? Подскажите, пожалуйста, более конкретно, как мне тут действовать? Честно говоря, слабо представляю, как мне потом разбирать несериализованный массив, не зная изначально его структуры.

  Ответить  
 
 автор: bronenos   (17.12.2008 в 01:32)   письмо автору
 
   для: Loneliness   (17.12.2008 в 01:02)
 

Надо внести правку еще в конец той части строки, что отведена под этот массив
Так что десериализуйте, добавьте, сериализуйте

  Ответить  
 
 автор: Loneliness   (17.12.2008 в 01:02)   письмо автору
 
 

Есть строка (сериализованный массив)вида:
a:3:{i:1234;a:2:{s:4:"from";i:1229259720;s:2:"to";i:1229346120;}i:7890;a:2{s:4:"from";i:1229459700;s:2:"to";i:1229891700;} i:12332;a:2{s:4:"from";i:1229459940;s:2:"to";i:1229459940;}}
Первое значение a:3: содержит количество элементов в массиве(3). То бишь, при добавлении нового элемента мне нужно также ТОЛЬКО это значение переписать на на 1 большим, независимо от того, какое значение там было до этого(может быть и a:350:, и a:3350:) и не зависимо от того, встречается ли еще где либо далее такая же подстрока. Подскажите, как это сделать? буду благодарен за примеры.

  Ответить  

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования