Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
PHP, запись в фаил данных, помогите решить проблему |

02.04.2010, 14:30
|
|
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме: 13484
Репутация:
0
|
|
PHP, запись в фаил данных, помогите решить проблему
Всем привет.. кратко о проблеме:
открываем файл в 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 из этого файла нормально будет работать, проигнорит всё лишнее, но вот в итоге вес файла может неплохо вырости по такой постанове... как можно затиреть всё то лишнее, заново не обращаясь к файлу?
|
|
|

02.04.2010, 14:37
|
|
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме: 2459557
Репутация:
606
|
|
w+
|
|
|

02.04.2010, 14:40
|
|
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме: 13484
Репутация:
0
|
|
ну да, пробывал, записывается, но при таком открытии он читать файл отказывается O.o
|
|
|

02.04.2010, 14:41
|
|
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме: 2459557
Репутация:
606
|
|
Сообщение от Demian
ну да, пробывал, записывается, но при таком открытии он читать файл отказывается O.o
ну значит сначала читай, потом записывай
|
|
|

02.04.2010, 14:46
|
|
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме: 13484
Репутация:
0
|
|
надо след сделать, попорядку:
1.Открыть файл
2.Закрыть доступ к нему всем, кроме текущего сеанса
3.Прочитать данные
4.Произвести с ними манипуляции
5.Записать данные
всё.
Как ты предлогаеш?2 раза файл открыть, первый раз прочитать, второй раз открыть на запись?так не канает, данные могут уже перезаписаться, пока ты будеш читать и закрывать файл, и потеряют актуальность
|
|
|

02.04.2010, 14:51
|
|
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме: 2459557
Репутация:
606
|
|
ну смотря сколько времени занимают "манипуляции". Если неск минут и больше, то да, могут потерять актуальность. Выход - работать с копиями файлов.
А если манипуляции вроде замены "11111" на "23" - то это длится менее секунды
|
|
|

02.04.2010, 14:55
|
|
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме: 13484
Репутация:
0
|
|
ну естественно не 111 на 23 заменить, это то ясно=) манипуляции занимают немного, шансов тоже мало, но всё же, надо почеловечески сделать и понять как можно избавиться от этого хвоста
|
|
|

02.04.2010, 14:59
|
|
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме: 6075534
Репутация:
2731
|
|
a+ пробуй
|
|
|

02.04.2010, 15:51
|
|
Участник форума
Регистрация: 30.03.2007
Сообщений: 121
Провел на форуме: 188563
Репутация:
52
|
|
Выполняет поставленую задачу:
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);//снятие блокировки
Статья по работе с файлами
Последний раз редактировалось JnK; 02.04.2010 в 16:08..
Причина: Добавлена ссылка на статью, список команд.
|
|
|

02.04.2010, 17:43
|
|
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме: 13484
Репутация:
0
|
|
Сообщение от JnK
Выполняет поставленую задачу:
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);//снятие блокировки
Статья по работе с файлами
спс=) ftruncate ($file_save,0); - помогло=)
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|