Всем привет.. кратко о проблеме: открываем файл в r+, в файле есть строка "1111111111", необходимо заменить её на "234" и чтобы в файле в итоге было записано "234", но после записи получаем "2341111111", забивает только первые байты, а всё что дальше - не трогает, а то что дальше нафиг не нужно.. пример скрипта: PHP: <?PHP $file_save = fopen('cat_id_db2.txt',"r+"); if (!$file_save) { usleep(100000); $file_save = fopen('cat_id_db2.txt','r+'); } $read=fread($file_save,filesize('cat_id_db2.txt')); echo $read; rewind($file_save); fwrite($file_save,'22'); fflush($file_save); fclose($file_save); ?> суть в том что файл открывается в начале скрипта, блокируется, выполняются некоторые манипуляции, результат записывается с сериализацией, файл закрывается, unserialize из этого файла нормально будет работать, проигнорит всё лишнее, но вот в итоге вес файла может неплохо вырости по такой постанове... как можно затиреть всё то лишнее, заново не обращаясь к файлу?
надо след сделать, попорядку: 1.Открыть файл 2.Закрыть доступ к нему всем, кроме текущего сеанса 3.Прочитать данные 4.Произвести с ними манипуляции 5.Записать данные всё. Как ты предлогаеш?2 раза файл открыть, первый раз прочитать, второй раз открыть на запись?так не канает, данные могут уже перезаписаться, пока ты будеш читать и закрывать файл, и потеряют актуальность
ну смотря сколько времени занимают "манипуляции". Если неск минут и больше, то да, могут потерять актуальность. Выход - работать с копиями файлов. А если манипуляции вроде замены "11111" на "23" - то это длится менее секунды
ну естественно не 111 на 23 заменить, это то ясно=) манипуляции занимают немного, шансов тоже мало, но всё же, надо почеловечески сделать и понять как можно избавиться от этого хвоста
Выполняет поставленую задачу: 0. Проверяет сущ. файла, если нет создает. 1. Читает,выводит 2. Записывает. PHP: <?PHP $text_replacement=$_GET['text']; $file = "count.txt"; echo "text_replacement: ".$_GET['text']."<br>"; If (is_file($file)) // является обычным файлом и сущ. ли он. { $cnt=file_get_contents($file); // Получаем содержимое в виде одной строки echo "Read: ".$cnt."<br>"; } file_put_contents($file, $text_replacement); //Записать строку в файл echo "Write: ".$text_replacement; ?> P.s. Если все же свой скрипт, то вот команды: PHP: ftruncate ($file_save,0); // команда очищает содержимое файла flock ($file_save,LOCK_EX);//блокировка файла flock ($file_save,LOCK_UN);//снятие блокировки Статья по работе с файлами