Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись в файл 
:(
    Опции темы
PROme
Дата 23.1.2004, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Цитата
Оба скрипта смогут прочесть файл паралельно, никто никого не обломит!


а как насчет этого:

Цитата
LOCK_EX - всем облом, выстраиваются в очередь


confused.gif

Цитата
тогда все будут думать что у них самые свежие данные, тогда n процессов


ага, мысля понята, но...

Цитата
А почему бы тебе не прочесть файл через fopen()->flock()->fread()->explode(), тогда файл будет заблокирован в самом начале


я вобще на ПХП с файлами не очень... не мог бы помочь подправить?

Код
#####################################################################

$stroka=3;
$element=1;
$zamena=911;

$all=file("file.txt");
$count=count($all);
$fp=fopen("file.txt","w+");
flock($fp,LOCK_EX);

$main=explode(" ", $all[$stroka]);
$main[$element]="$zamena\n";
$all[$stroka]=$main[0]." ".$main[1];
fwrite($fp, implode("",$all));

fclose($fp);

#####################################################################



--------------------
SEO-мастер
PM MAIL WWW   Вверх
Sardar
Дата 23.1.2004, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Вообщем так, я написал класс для удобной работы с большими файлами. Класс не грузит файл в память так что сможешь работать хоть с гигабайтными файлами. Как смогу выложу ссылку на форуме, может кому-нибудь еще интересно будет. Только просьба сохранить строку авторства сверху smile.gif.

Вот результаты на моей машине для 2Мб файла:
Liba created: 0.00020098686218262
Lines: 100800
Reading sequentiel done: 0.0024261474609375
Reading random done: 0.0036718845367432
Writing sequentiel done: 0.0085330009460449
Writing random done: 0.00011301040649414
Adding done: 0.0071640014648438
Reading/writing random done: 0.006505012512207
All tests done

Извиняюсь за narod.ru, но на другие места просто времение нет. Вот ссылка:LibaForPROme v1.0 smile.gif
Еще пару лет smile.gif и я доберу эти 500 постов до участника клуба, вот тогда смогу публиковать файлы здесь.

Это сообщение отредактировал(а) Sardar - 24.1.2004, 01:07


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Secandr
Дата 24.1.2004, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



ElectricalStorm не факт.
1. Кто сказал, что все числа по одной цифре?
2. Нужно учесть перевод строки - два символа \r\n

Sardar 500 постов - не горантируют, что тебя примут... sad.gif


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
PROme
Дата 24.1.2004, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Sardar спасибо огромное!!!
Там, конечно, такого наворотил... пока будет работать мой вариант... пока в твоем буду разбираться smile.gifsmile.gifsmile.gif

ЗЫ: вот это топик... на Винграде у меня такого еще небыло... smile.gif


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Secandr
Дата 24.1.2004, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



Офтоп:
PROme действительно, редко когда у меня за 1 страницу(40 постов) переваливает smile.gif


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Raptus Melanholicus
Дата 24.1.2004, 12:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 6.1.2004
Где: Kiev::Ua

Репутация: нет
Всего: нет



PROme Так ты не хочешь использовать БД только из-за того, что не знаешь, как там бекапятся данные?

Это сообщение отредактировал(а) Raptus Melanholicus - 24.1.2004, 12:55
PM MAIL WWW ICQ   Вверх
ElectricalStorm
Дата 24.1.2004, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 547
Регистрация: 22.1.2004

Репутация: нет
Всего: 9



Secandr - это же только пример к томуже плохой но если маленько подумать то из его него можно сделать рабочий !



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
Sardar
Дата 24.1.2004, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

Репутация: 4
Всего: 317



Цитата
пока будет работать мой вариант

ИМXО не стоит, т.к. ты грузишь файл целиком, а значит когда файл разрастется скрипт(а может и сервер smile.gif) начнет часто падать.
Цитата
PROme действительно, редко когда у меня за 1 страницу(40 постов) переваливает

Главное не флеймим smile.gif. Жалко что соотношение рейтинг/кол-во постов уменьшается, так что PROme если код понравится плюсик слева wink.gif .
Дока к класу на скорую руку. Класс представляет файл в виде таблицы:
Код

 1  2  3
 4  5  7
56870 ы!

Метод open() открывает файл с данными, если ранее был открыт другой файл, то он его закрывает. В аргументах ты указываешь: имя_файла, длинна_одного_элемента_в_байтах(3 по умолчанию), кол-во_элементов_в_строке(2 по умолчанию). Возрвратит true при успешном выполнении.
alive() показывает открыт ли файл.
close() закрывает текущий файл.
flush() - принудительно скидывает данные на диск, по идее не используется.
Методы работы с файлом:
countLines() возвращает количество строк в файле.
read(индекс_строки) - возвращает массив с содержимыми полей заданной строки.
write(индекс_строки,...) - изменяет содержимое полей в строке. Есть два способа использования:
1) write($index, $coumn1, $column2,...,$columnN)
2) write($index, array($column1, $column2,...,$columnN))
Если переданное поле равно null то берется старое значние: write(5, null, "hoi") - в 6 строке изменится второе поле, первое без изменений.
Если надо добавить строку в файл, то указываешь в write() верхний_индкекс+1: write(countLines(),array(7,90)).
Все методы кроме write() и read() при ошибках выкидывют Warning'и. write() кидает warning если ты неправильно используешь класс, например при открытии ты указал, что в строке 3 элемента, а при работе даешь только 2. На ошибки чтения/записи предупреждений нет, т.к. не люблю сотни строк warning'ов из циклов, но ты можешь проверять возвращемое значение, true если все ОК.

На разработку класса + теста с нуля ушло 4 часа, а на то что бы опубликовать 2 часа - только сейчас доходит как это гиморно найти хороший webspace bored.gif .

ElectricalStorm
Цитата
это же только пример к томуже плохой но если маленько подумать то из его него можно сделать рабочий !

Perl
Код

open FILE, "+<text.txt";
$q = 5; # количество символов в строке   (1 2 3) числа + пробелы
$n = 8; # номер строки
$positon = ($q * $n) + $q + 1;
$str = "9 9 9";
seek (FILE, $positon, 1);
print FILE $str;

А вот аналог на PHP.
Код

$q = 5; # количество символов в строке   (1 2 3) числа + пробелы
$n = 8; # номер строки
$fp=fopen("file.txt","r+");
fseek($fp,$q*$n,SEEK_SET);
$str="9 9 9";
fwrite($fp,$str);
fclose($fp);


Есть разница между что-то делать и что-то делать хорошо учитывая исключения, удобство работы и т.д. Наверное потому получается програмный код больший чем несколько строк wink.gif.


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
PROme
Дата 24.1.2004, 20:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 23.7.2003
Где: Kiev

Репутация: -1
Всего: 1



Цитата
ИМXО не стоит, т.к. ты грузишь файл целиком, а значит когда файл разрастется скрипт(а может и сервер ) начнет часто падать.


В том то и дело - файл растет с 0, развивают его посетители... т.е. первые 1-2 месяца он вред ли привысит 1-2 метра...

Цитата
Жалко что соотношение рейтинг/кол-во постов уменьшается, так что PROme если код понравится плюсик слева  .


А что такое соотношение есть или ты сам придумал?
Я уже давно кликал smile.gif меня обламали - надо иметь 100 постов...
ИМХО - важнее общий +, а не отношение

Цитата
Так ты не хочешь использовать БД только из-за того, что не знаешь, как там бекапятся данные?


2 или 3 раза писал что так медленее выходит... а еще эта SQL-Injection - мало ли что там еще в ближайшее время найдет...
ЗЫ: а если подскажешь, ради интереса и развития, с радостью изучу методики... smile.gif


--------------------
SEO-мастер
PM MAIL WWW   Вверх
Secandr
Дата 25.1.2004, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Связист
****


Профиль
Группа: Экс. модератор
Сообщений: 4043
Регистрация: 3.8.2003
Где: Russia, Volgograd

Репутация: 5
Всего: 39



PROme У меня перл работает с логами весом 100-600Мб и ничего всё ОК. Время работы 30-40 сек. Запускается это всё по крону и парсится перлом, на базе полученых данных рисуется графики статистики.

Так что 1-2 Мб это нестрашно.

P.S. Хотя перл шустрее работает.
P.P.S. PROme Опиши проблему в разделе "БД", может старшие товарищи что посоветуют smile.gif Только подробно опиши: какие данные, в каком количистве, зачем тебе и как часто бекап делать.


--------------------
Мышки плакали, кололись, но продолжали жрать кактусы (с) cisco
PM ICQ AOL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.