За последние 24 часа нас посетили 22962 программиста и 1724 робота. Сейчас ищут 2063 программиста ...

Запись переменных удаление в файле

Тема в разделе "Прочие вопросы по PHP", создана пользователем Костя, 13 июн 2006.

  1. Костя

    Костя Активный пользователь

    С нами с:
    13 июн 2006
    Сообщения:
    3
    Симпатии:
    0
    Как можно записать новое значение в {} а так-же как удалить одно из значений в таком файле

    Код (Text):
    1.  
    2. a:4:{s:9:"user.Igor";s:6:"thjkug";s:11:"user.Deemon";s:4:"6hh7";s:11:"user.PAZUZU";s:5:"88456";s:7:"user.TT";s:4:"6378";}
    и такой-же вопрос, но тут как заменить значение не переписывая всей строки в таком файле

    Код (Text):
    1.  
    2. У канюшни|1|на север|loc.3|на восток|loc.9|на юг по дороге|loc.21
     
  2. Mavir

    Mavir Guest

    Первый код. Это сериализованные данные. Вернуть к нормальному виду поможет функция unserialize().
    $x=unserialize(вот_эта_вся_строка);
    Чтобы посмотреть, что получилось - print_r($x).

    Второй код. Если длина новой строки равна, равна тому участку, который нужно заменить, то можно использовать fseek(). Тут я не уверен, сам с этой функцией не работал. А если не равны, а тем более новое значение больше заменяемого, то никак.
     
  3. Костя

    Костя Активный пользователь

    С нами с:
    13 июн 2006
    Сообщения:
    3
    Симпатии:
    0
    Как эти дпные посмотреть это я и так знаю
    можно так открывая вместе файл для записи
    Код (Text):
    1.  
    2. $msg=unserialize(fputs(fopen($msg_1,"r+")));
    а можно более наворочиным способом и тут где-то близко и записать в строку, но я всю голову сломал где сделал не так как не записывает
    Код (Text):
    1.  
    2. $msg_1="user/$login/msg.dat";
    3. if (file_exists($msg_1)) {
    4.     $file_msg = fopen($msg_1,"r+");
    5.     if ($file_msg===FALSE) {usleep(100000); $file_msg = fopen($msg_1,"w");}
    6.     flock($file_msg,2);
    7.     $msg_2="";
    8.     while (!feof ($file_msg)) $msg_2.= fgets($file_msg, filesize($msg_1));
    9.     $msg_2= unserialize($msg_2);
    10.     }
    11.     $play=&$msg_2;
    Дальше такая строка и читаем каждое значение без проблем
    Код (Text):
    1.  
    2. foreach (array_keys($play) as $i) ;
    пробовал записать таким способом
    Код (Text):
    1.  
    2.     $play[$log]=$pas;
    не выходит, но решение знаю рядом.

    Вторую строку то-же легко

    Код (Text):
    1.  
    2. $xxx=explode(implode('|',file($msg_1)));
    И во второй строке значение меняеться и не обязательно одной длины они это точно!!!
     
  4. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Ыыы. По первому вопросу - получил ты данные из файла, поменял что нужно, и записал обратно. В каком месте трудности?
    По второму вопросу - никак. Файл можно переписать полностью или дописать туда чтото
     
  5. Костя

    Костя Активный пользователь

    С нами с:
    13 июн 2006
    Сообщения:
    3
    Симпатии:
    0
    Так в том и проблема что не пишет, вроде должно писать, но........ ((((((((
     
  6. olo

    olo Активный пользователь

    С нами с:
    28 апр 2006
    Сообщения:
    272
    Симпатии:
    0
    Если не пишет то включи просмотр ошибок и ошибку в студию. Скорей всего у скрипта нет прав на запись в этот файл, поставь файлу с данными права на запись для всех
     
  7. Mavir

    Mavir Guest

    В коде, который привел, нет ни одной строчки, которая записывает в файл. И код
    Код (Text):
    1. $msg_1="user/$login/msg.dat";
    2. if (file_exists($msg_1)) {
    3.    $file_msg = fopen($msg_1,"r+");
    4.    if ($file_msg===FALSE) {usleep(100000); $file_msg = fopen($msg_1,"w");}
    5.    flock($file_msg,2);
    6.    $msg_2="";
    7.    while (!feof ($file_msg)) $msg_2.= fgets($file_msg, filesize($msg_1));
    8.    $msg_2= unserialize($msg_2);
    9.    }
    10.    $play=&$msg_2;
    весьма странный. Зачем открывать файл в режиме "r+"? А если новой файл будет короче старого, то останутся не нужные хвосты.
    Нужно делать так
    1. Читаем содержимое файла. Можно открывая fopen, можно через file_get_contents
    2. Совершаем операции с содержимым файла.
    3. Самое главное, записываем все в файл.