одновременная запись в файл!

HOCOK

Guest
одновременная запись в файл!

Меня интересует такой вапрос.

У меня есть файл: test.txt
и test.php

<form method=post>
<input name=txt>
</form>
PHP:
<?
$txt=$_POST['txt'];
if($txt){
$filename = "test.txt";
$get=file_get_contents($filename);
$fp=fopen($filename,w);
fwrite($fp,"$txt\r\n$get");
print "Thanks for write";
}
?>

Если 2 или более пользователей папробуют записать в файл свой текст, то пхп будет задерживать других и по очереди обрабатывать каждый запрос на запись?

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

nikit87

Новичок
надо блокировать файл. а то получиться что он обнулиться
 

Metal

Guest
Он будет всё равно каждый раз перезаписыватся на то что написал последний кто пользовался этим скриптом.
 

Metal

Guest
$fp=fopen($filename,w);
это переписывать файл
а записывать в конец так:
$fp=fopen($filename,a);

Для чтения вместо a - r

Только дело в том что твоя запись будет всегда проходить в ту же строчку.
тоесть весь твой файл будет составлять из себя такое:



первый текст
первый текст
первый текст
первый текствторой текст
второй текст...

Тоесть надо ещё переход строчки устроить между текстами.

Блокировка:
http://il2.php.net/manual/en/function.flock.php
 

HOCOK

Guest
Автор оригинала: Metal
Он будет всё равно каждый раз перезаписыватся на то что написал последний кто пользовался этим скриптом.
как быть?
 

Metal

Guest
Только так!

<?php

$txt=$_POST['txt'];
if(isset($txt)){
$filename = "test.txt";
$fp=fopen($filename,"a");
flock($fp,2);
fwrite($fp,"$txt\r\n");
flock($fp,3);
print "Thanks for write";
}
?>
 

HOCOK

Guest
во нащёл по круче мулю
http://omsk-777.ru/all.php?act=block
 

Metal

Guest
Но есть один НО!
Сначала тебе придётся лиюо в ручную, либо если у тебя текстовый файл создаётся сам, допустим каждый час новый,
в нём всегда должна быть прписанна первая строчка. Любая.

Если у тебя скрипт сам создаёт текстовые файлы как только допустим размер предыдущего превышает Х или раз в час или каждые 5 текстов..

То тебе надо так:

Допустим скрипт создаёт новый тхт файл после того как старый привысил размер в 1024 байтов:


<?php

If (!empty($_POST['txt'])){

if (file_exists("test1.txt")){

$size=filesize("test1.txt");

if($size<1024){


$txt=$_POST['txt'];
if(isset($txt)){
$filename = "test.txt";
$fp=fopen($filename,"a");
flock($fp,2);
fwrite($fp,"$txt\r\n");
flock($fp,3);
print "Thanks for write";
}

else {
touch("test2.txt");

$txt=$_POST['txt'];
if(isset($txt)){
$filename = "test2.txt";
$fp=fopen($filename,"a");
flock($fp,2);
fwrite($fp,"$txt\r\n");
flock($fp,3);
print "Thanks for write";
}


esle {
touch("test1.txt");

$txt=$_POST['txt'];
if(isset($txt)){
$filename = "test1.txt";
$fp=fopen($filename,"a");
flock($fp,2);
fwrite($fp,"$txt\r\n");
flock($fp,3);
print "Thanks for write";
}
or die("No text value" );
?>

мне кажется чо так, но сам смотри..
Я его не тестил пока.

-~{}~ 19.06.05 14:12:

Уже нашёл ошибку. после того как второй файл тоже переполнится. то запись продолжить идти м него, так на размер всё таки проверяют первый..

Ладно, могу доделать, но выписывать его тут, когда он будет раза в три длиннее смысла нет
Поэтому могу доделать и выслать на мыло.
 

SiMM

Новичок
> http://omsk-777.ru/all.php?act=block
Лажа. Чтобы не было проблем при работе с файлами скрипт должен открывать файл лишь единожды, после чего тут же лочить. А уже потом все остальные действия по чтению/записи/модификации. Т.е. в данном случае
PHP:
if ($_SERVER['REQUEST_METHOD']=='POST'){ 
  $fp = fopen('test.txt','rb+');
  flock($fp,LOCK_EX) or die('flock error');
  for ($get=array($_POST['txt']."\n"); !feof($fp); ) $get[] = fgets($fp);
  fseek($fp,0);
  fwrite($fp,join('',$get)); 
  fflush($fp);
  flock($fp,LOCK_UN);
  fclose($fp);
  print "Thanks for write"; 
}
 

HOCOK

Guest
так в твоём случии другому юзеру выдасть File is locked ..
 

SiMM

Новичок
HOCOK, а ты попробуй.
PS: в данном случае правильнее было написать не File is locked, а flock error.
 

HOCOK

Guest
теперь смело можна сказать что разнеца между работай пхп и мускула с скоросте ) хотя тут тоже можна поспорить..
 

Metal

Guest
Автор оригинала: HOCOK
теперь смело можна сказать что разнеца между работай пхп и мускула с скоросте ) хотя тут тоже можна поспорить..
Кстати, а что такое вообще эот ваш мускул?
 
Сверху