|
|
|
| Есть строка (сериализованный массив)вида:
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:) и не зависимо от того, встречается ли еще где либо далее такая же подстрока. Подскажите, как это сделать? буду благодарен за примеры. | |
|
|
|
|
|
|
|
для: Loneliness
(17.12.2008 в 01:02)
| | Надо внести правку еще в конец той части строки, что отведена под этот массив
Так что десериализуйте, добавьте, сериализуйте | |
|
|
|
|
|
|
|
для: bronenos
(17.12.2008 в 01:32)
| | Но стандартно, например в блокноте я добавляю новую запись, меняю значение на 1 больше,сохраняю- и все нормально работает, никаких правок более не делаю. Разве не то же самое получится, если обработать сериализованный массив в таком виде и записать строку обратно уже откорректированной? Подскажите, пожалуйста, более конкретно, как мне тут действовать? Честно говоря, слабо представляю, как мне потом разбирать несериализованный массив, не зная изначально его структуры. | |
|
|
|
|
|
|
|
для: 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(0, count($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 в 15:48)
| | Делаю так:
....
$f_arr = str_replace('s:5:"','i:',$f_arr);
$f_arr = str_replace('";a:2:{',';a:2:{',$f_arr);
.....
|
Получаю на выходе визуально то что хотел, но как надо не работает таким макаром.... Вероятно, потому что Исходный массив для сериализации не тот что нужен был... | |
|
|
|
|