Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Полная перезапись файла? 
:(
    Опции темы
DARKVovich
  Дата 8.3.2011, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.3.2011

Репутация: нет
Всего: нет



Подскажите, как осуществить полную перезапись файла при каждом сохранении? Почитал список флагов для fopen - там только варьируется положение в начале или конце, а перезаписи не нашел.

Мой код:
Код

$file_gb="markers.xml"; // файл
    $file_tmp="markers_tmp.xml"; // временный файл
    $str=$mydata;
    // проверяем, не было ли сбоя в предыдущем запуске скрипта
    if(file_exists($file_tmp)) die("fatal error, call administrator!");
    // копируем содержимое файла в tmp
    if(copy($file_gb, $file_tmp))
    {
        // удачно скопировался, можно перезаписывать основной файл
        if($w=fopen($file_gb,"w"))
        {
        flock($w,2); // блокируем файл
        fwrite($w,$str."\n"); // записываем первую строку
        if(!$r=fopen($file_tmp,"r")) die("can't open file");
        flock($r,1);
        while($str=fgets($r,10240)) // читаем построчно
        {
            fputs($w,$str); // пишем построчно
        }
        flock($r,3);
        fclose($r);
        flock($w,3);
        fclose($w);
        unlink($file_tmp);
        }
    }


P.S. И подскажите, можно ли в моем случае заменить все функцией file_put_contents('file.txt', $str); ?

Это сообщение отредактировал(а) DARKVovich - 8.3.2011, 23:26
PM MAIL   Вверх
Muerto
Дата 9.3.2011, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

Репутация: 3
Всего: 4



в fopen есть w к примеру


--------------------
user posted image
PM MAIL   Вверх
ksnk
Дата 9.3.2011, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



что должна делать эта операция? В коде написано - открой файл и перезапиши его заново тем-же содержимым? Так и надо делать?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
DARKVovich
Дата 9.3.2011, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.3.2011

Репутация: нет
Всего: нет



Цитата(ksnk @ 9.3.2011,  09:00)
что должна делать эта операция? В коде написано - открой файл и перезапиши его заново тем-же содержимым? Так и надо делать?

Вот это мне и нужно, и вроде все стоит (флаг W как рекомендовали выше) - но файл НЕ перезаписывается, а добавляются новые строки внизу
PM MAIL   Вверх
lukas
Дата 9.3.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 771
Регистрация: 23.2.2007

Репутация: 3
Всего: 15



Для этого есть модификатор w+:

Цитата

'w+'  Открывает файл для чтения и записи; помещает указатель в начало файла и обрезает файл до нулевой длинны. Если файл не существует - пробует его создать. 



Если файл большой, то использовать file_put_contents не советую (ибо весь файл может оказаться в оперативной памяти), лучше записать его по частям.

Это сообщение отредактировал(а) lukas - 9.3.2011, 12:16


--------------------
http://code.google.com/p/orionphp/ - opensource скриптовой язык Orion (аналог PHP) для freepascal/delphi.
PM MAIL WWW   Вверх
DARKVovich
Дата 9.3.2011, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.3.2011

Репутация: нет
Всего: нет



Цитата(lukas @ 9.3.2011,  12:14)
Для этого есть модификатор w+:

Поставил - все тоже самое, данные записываются вначале + файл не создается автоматически(если нету)

UPD: сделал оба флага w+ - все перезаписалось! Спасибо)

Это сообщение отредактировал(а) DARKVovich - 9.3.2011, 12:36
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0572 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.