[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Пропадают строки при дозаписи файла
Гость_Виктор
Всем привет!

Так как у хостера отсутствует возможность использования MySQL, я написал скрипт для записи и чтения данных из файлов (по прямым ссылкам файлы нельзя просмотреть).

Проблема следующая: при дозаписи в файл следующей строки (пример):
\nКод|Код 2|Код3|
Иногда происходит "затирание" первой строки файла.
То есть строка записывается нормально, в конец - как и должна, но при этом стирается перая строка файла.

Данная проблема происходит не каждый раз, а примерно один в 15-20 раз.

Файл имеет следующую структуру (обозначил с переводами строк):
\n
|Код 1|Код 2|Код 3|\n
|Код 1|Код 2|Код 3|\n
|Код 1|Код 2|Код 3|


Дозапись пробовал производить с помощью функции put_contents(), а также с помощью fwrite с заданным режимом "a".

Не могу понять почему происходить "затирание" первой строки.
К скрипту обращаются часто. Был вариант, что скрипт не успевает сохранить изменённый файл, как к нему снова делают запрос - но в таком случае бы просто не записывалась вторая строка (из второго запрса). Почему удаляется именно первая строка файла мне непонятно.

Помогите, пожалуйста, решить данную проблему.

Спасибо!



Спустя 25 минут, 2 секунды (1.10.2011 - 18:02) Winston написал(а):
Вот так
file_put_contents('file.txt', $data . "\r\n", FILE_APPEND);

Спустя 2 минуты, 38 секунд (1.10.2011 - 18:05) Guest написал(а):
Winston, да, да. Я так и делал (забыл "file_"). Строки также затируются, как и при использовании fwrite с режимом "a".

Спустя 5 минут, 58 секунд (1.10.2011 - 18:11) Winston написал(а):
Guest
Я же добавил FILE_APPEND, теперь не должно перезатиратся.

Спустя 1 минута, 26 секунд (1.10.2011 - 18:12) Guest написал(а):
Winston, конечно, я и использовал с FILE_APPEND (просто в первом посте указал только название функции, без параметров).

Спустя 44 секунды (1.10.2011 - 18:13) bodja написал(а):
а читаем как?

Спустя 4 минуты, 29 секунд (1.10.2011 - 18:17) Guest написал(а):
bodja, через file(). Это не имеет значения. Строки удаляются именно при записи.

Спустя 4 минуты, 54 секунды (1.10.2011 - 18:22) Winston написал(а):
Цитата (Guest @ 1.10.2011 - 18:17)
через file(). Это не имеет значения. Строки удаляются именно при записи

А ты знаешь, что возвращает ф-я file() ?
Лучше тогда использовать file_get_contents()

Спустя 5 минут, 27 секунд (1.10.2011 - 18:28) bodja написал(а):
Цитата
А ты знаешь, что возвращает ф-я file() ?

Правильно,ф-я file() возвращает массив. biggrin.gif
тут скорее всего проблемы с формированием массива перед записью.

Спустя 12 минут, 5 секунд (1.10.2011 - 18:40) Guest написал(а):
Я знаю, что она массив возращает. Мне и нужно массив, т. к. в дальнейшем необходимо работать со строками, как с элементами массива.

Спустя 43 секунды (1.10.2011 - 18:41) Guest написал(а):
Я ничего не формирую. Я использую лишь дозапись (то есть текущее содержимое файла не трогаю).

Спустя 1 минута, 22 секунды (1.10.2011 - 18:42) Winston написал(а):
Покажи свой код.

Спустя 2 минуты, 47 секунд (1.10.2011 - 18:45) Guest написал(а):
$n = func_num_args();
$data = "";
for($i=1;$i<$n;$i++) {$data.= func_get_arg($i)."|u|";}; // Преобразуем данные в нужный формат
file_put_contents($path,"\n".$data, FILE_APPEND | FILE_BINARY);
return '1';

Спустя 26 минут, 21 секунда (1.10.2011 - 19:11) bodja написал(а):
Обьясните как вот это
Цитата
Я ничего не формирую. Я использую лишь дозапись

состыковать с вот этим.
Цитата
Мне и нужно массив, т. к. в дальнейшем необходимо работать со строками, как с элементами массива


Если вам нужно чтото в массив добавить используйте array_push и потом сохраняйте file_put_contents

Спустя 12 часов, 21 минута, 50 секунд (2.10.2011 - 07:33) Guest написал(а):
bodja, я получаю из файла массив, чтобы работать с ним в дальнейшем (вывести данные).
Когда необходимо записать данные файл, весь файл я не перезаписываю (то есть при записи я не работаю с текущим содержимым файла), я делаю лишь дозапись одной строки.

Первая строка удаляется именно при дозаписи строки в файл.

Спустя 1 час, 25 минут, 22 секунды (2.10.2011 - 08:58) bodja написал(а):
Если используется только дозапись,то потерятся не может,
по крайней мере у меня такого небыло никогда,
Возможно может быть причина если разная кодировка вашего файла с данными и скрипта.

Спустя 1 день, 2 часа, 50 минут, 25 секунд (3.10.2011 - 11:49) Guest написал(а):
bodja, пока не знаю, возможно.

У файла, где хранятся данные была кодировку UTF-8 без BOM, а у скрипта просто UTF-8.

BOM, я так понимаю, это информация в начале файла. Может быть, что из-за отсутствия (без BOM) этой информации и удалялись первые строки?

Я сейчас сменил кодировку на UTF-8 - посмотрим, что будет.

Спустя 4 часа, 57 минут, 18 секунд (3.10.2011 - 16:46) Guest написал(а):
Поставил кодировку - UTF-8 (с BOM) - строки всё-равно стираются.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.