Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   PHP, запись в фаил данных, помогите решить проблему (https://forum.antichat.xyz/showthread.php?t=192733)

Demian 02.04.2010 14:30

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

w+

Demian 02.04.2010 14:40

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

попугай 02.04.2010 14:41

Цитата:

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


ну значит сначала читай, потом записывай

Demian 02.04.2010 14:46

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

попугай 02.04.2010 14:51

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

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

Demian 02.04.2010 14:55

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

mailbrush 02.04.2010 14:59

a+ пробуй

JnK 02.04.2010 15:51

Выполняет поставленую задачу:
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);//снятие блокировки 

Статья по работе с файлами

Demian 02.04.2010 17:43

Цитата:

Сообщение от 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); - помогло=)


Время: 21:53