таки да. действия ТС не похожи на семантику a=append. зачем лишний раз запутывать библиотеку php ? обещал добавлять данные - вот и добавляй.
я сейчас проверил "c+" - отлично работает. а "a+" действительно необъяснимо глючит. где-то у них еще внутри буферизируется что-то.
<?php function write($dat){ $fopen=fopen("111.dat","c+"); flock($fopen,LOCK_EX); # Блокируем файл $file=fread($fopen,50000000); /* Читаем 50 Mb из файла */ if(strlen($file)>=1){ $file=explode("\n",$file); }else{ $file[0]=""; } # Если денные есть превращаем их в массив $count=count($file); if($count!="0"){ array_unshift($file,$dat); }else{ $file[0]=$dat; } # Если массив пустой создаем первый элемент иначе цепляем элемент в начало массива $file=trim(implode("\n",$file)); # Массив превращаем в строку ftruncate($fopen,0); # Очищаем файл fseek($fopen, 0); fwrite($fopen,$file); # Записываем в файл fflush($fopen); flock($fopen,LOCK_UN); # Разблокируем fclose($fopen); # Закрываем } for($kr=0;$kr<1000;$kr++){ write(time()); } ?>
еще вот интересно, что в комментах к функции flock в документации некто pentek_imre at mailbox dot hu http://ru.php.net/manual/en/function.flock.php описывает сценарий race condition, но по-моему он гонит. он тоже сделал открытие файла в "a+" и точно так же его проглючило.
мой вариант по выполняемым операция идентичен оригинальной логике и ТС и Пентека того, но в режиме "c+" ничего не глючит.
Andreyka,
ok.
какие именно устройства для хранения данных используемые в бизнесе, умеют объединяться в единую файловую систему и работать дублируя друг друга ?
То есть, купили ДВА ящика, набили винтами, воткнули в одну сеть, примонтировали общую файловую систему к каждому вебсерверу. И это все заработало легко и приятно.
Не требуя для эксплуатации специально обученного персонала.
Дублируя информацию друг на друге.
Не создавая недопустимых задержек.
Эти все требования к хранилищу вытекают из моего вольного определения "энтерпрайзная коробка с винтами" и требований ТС к системе хранения.
Ink-developer, а остальные 2 случая кто будет читать? да мало ли по какой причине ему захочется вернуть меньше байт. В документации так же не написано, что есть гарантия на то что файл полностью считается за один вызов.
http://php.net/manual/en/function.fread.php
не ровно length bytes, а именно ДО. так же и с fwrite.
обычно код с использованием fread/fwrite оборачивается в цикл. тут и разбираться не нужно - сразу видно потенциальную ошибку.
И эта ошибка может быть причиной наблюдаемого эффекта. А может и не быть.
я абсолютно точно знаю, что такое использование fread и fwrite неправильное. это становится очевидно после прочтения документации.
влияет ли это или нет на описанную тобой проблему - мне думать лень.
ну это ты так думаешь, что 50 мб. на самом деле читаем не более 50 мб. формально даже для большого файла функция в праве вернуть 1 байт.
та же фигня и с fwrite(). он может не захотеть и не записать указанный размер.
используй базу данных и все будет хорошо.
landan, какой-то вопрос не по сути.
Ну да, если у тебя на рабочем ПК скорость отдачи высокая, то тебе будет легче заливать видео на свой сервер.
И что дальше?
Andreyka, я уже давно подозреваю, что вы - бот : на знакомые слова реагируете рекламой, а сути вопроса не улавливаете.
Andreyka, мне то зачем ? просто ссылку дай на конкретные модели оборудования в подтверждение своих слов.
Raistlin, ну это уж каждому по возможностям. ты же не напишешь это бесплатно и специально для ТС. memcache к тому очищается при перезапуске и его размер ограничен