ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

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

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

Репутация: 606


По умолчанию

w+
 
Ответить с цитированием

  #3  
Старый 02.04.2010, 14:40
Аватар для Demian
Demian
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме:
13484

Репутация: 0
По умолчанию

ну да, пробывал, записывается, но при таком открытии он читать файл отказывается O.o
 
Ответить с цитированием

  #4  
Старый 02.04.2010, 14:41
Аватар для попугай
попугай
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме:
2459557

Репутация: 606


По умолчанию

Цитата:
Сообщение от Demian  
ну да, пробывал, записывается, но при таком открытии он читать файл отказывается O.o

ну значит сначала читай, потом записывай
 
Ответить с цитированием

  #5  
Старый 02.04.2010, 14:46
Аватар для Demian
Demian
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме:
13484

Репутация: 0
По умолчанию

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

  #6  
Старый 02.04.2010, 14:51
Аватар для попугай
попугай
Познавший АНТИЧАТ
Регистрация: 15.01.2008
Сообщений: 1,166
Провел на форуме:
2459557

Репутация: 606


По умолчанию

ну смотря сколько времени занимают "манипуляции". Если неск минут и больше, то да, могут потерять актуальность. Выход - работать с копиями файлов.

А если манипуляции вроде замены "11111" на "23" - то это длится менее секунды
 
Ответить с цитированием

  #7  
Старый 02.04.2010, 14:55
Аватар для Demian
Demian
Новичок
Регистрация: 08.03.2010
Сообщений: 5
Провел на форуме:
13484

Репутация: 0
По умолчанию

ну естественно не 111 на 23 заменить, это то ясно=) манипуляции занимают немного, шансов тоже мало, но всё же, надо почеловечески сделать и понять как можно избавиться от этого хвоста
 
Ответить с цитированием

  #8  
Старый 02.04.2010, 14:59
Аватар для mailbrush
mailbrush
Познавший АНТИЧАТ
Регистрация: 24.06.2008
Сообщений: 1,996
Провел на форуме:
6075534

Репутация: 2731


Отправить сообщение для mailbrush с помощью ICQ
По умолчанию

a+ пробуй
 
Ответить с цитированием

  #9  
Старый 02.04.2010, 15:51
Аватар для JnK
JnK
Участник форума
Регистрация: 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.. Причина: Добавлена ссылка на статью, список команд.
 
Ответить с цитированием

  #10  
Старый 02.04.2010, 17:43
Аватар для Demian
Demian
Новичок
Регистрация: 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); - помогло=)
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите настроить php slider PHP, PERL, MySQL, JavaScript 3 08.06.2006 16:53
Помогите решить проблему. Notification Area. Niard Болталка 0 02.02.2006 08:11
Долбим Sql’ные базы данных k00p3r Чужие Статьи 0 13.06.2005 14:13
Sql инъекция и Oracle, часть первая k00p3r Чужие Статьи 0 13.06.2005 11:23
Защищаем MySql. Шаг за шагом k00p3r Чужие Статьи 0 13.06.2005 11:18



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ