![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Cool
$main=explode(" ", $all[$stroka]); $main[$element]=$zamena; $all[$stroka]="$main[0] $main[1]"; fwrite($fp, implode("\n",$all)); Далее представь сценарий два, одновременных запроса: скрипт1: file() скрипт2: file() - одинаковые данные как и у скрипт1 скрипт1: fwrite(); скрипт2: fwrite() - потеряли данные от скрипт1 Весело -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| PROme |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
вот только не пойму как это работает надо будет завтра с утрица раздуплиться к стати там надо кое-че подправить:
а то пустые строки шпарит... а при таком раскладе implode вобще нужен
а разве flock не для этого? я раздул базы так что скрипты выполнялись 4.4...4.5 секунды, запустил сразу два скрипта... первый отработал как надо, второй подождал пока первый доработает и отработал сам, в итоге второй работал чуть менее 8 сек... целосность файла сохранена... люблю практику -------------------- SEO-мастер |
||||||
|
|||||||
| Sardar |
|
||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Ты знаешь номер строки, следовательно не надо перебирать все строки. В конце склеиваешь все до одной строки и разом пишешь в файл.
Смотри: 1) в файле лежит "а" 2) скрипт1 прочел "a" из файла 3) скрипт2 прочел "а" из файла 4) скрипт1 заблокировал файл 5) скрипт2 ждет блокировки 6) скрипт1 решил записать "б" в файл т.к. раньше было "а" 7) скрипт1 разблокировал файл 8) скрипт2 решил записать "б" и перезаписывает "б" первого скрипта, т.е. как будто скрипт1 не работал. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||
|
|||||
| IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 44 Всего: 73 |
2 PROme, не надо ... просто потом при записи делаешь implode("\r\n", $line_num); он в конце каждой строки вставит знак окончания строки.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
| Secandr |
|
||||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
Человеки!
А что значит строка
Может имелов в виду:
? ? ? ? ? ? ? ? ? ? |
||||
|
|||||
| PROme |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
ну, не знаю, незнаю, спорить не буду, но погляди сюда:
1) мы вначале октрываем файл в режиме w+ (Чтение и запись. Указатель текущей позиции устанавливается в начало файла, а все содержимое файла уничтожается. Если файл не существует, функция пытается создать его) 2) далее мы блокируем работу с фалом (вот тока интересно на запись или вобще 3) твои 6),7),8), ИМХО, не верны - посмотри скрипт1 не ведет после блокировки никакой разблокировки - разблокировка непосредственно перед закрытием файта (ну и ясно что далеко после записи) - т.е. если скрипт1 заблокировал файл, то файл заблокирован для ВСЕХ кроме самого блокиратора (скрипта) и ему незачем его разблокировать чтоб произвести запись ну, я так понимаю....
понятно это ж для винды
конечно! и не говори что твой вариант лучше - я теоретик, уже давно проверено: одно и то же на твоем коде выполняется 1.25...1.30 с, мой вариант обеспечивает 0.75...0.8 с разницу чувствуешь к стати, насчет скорости, благодаря тому что Sardar помог убрать цикл скорасть работы скрипта возврасла на 20-25% !!! ЗЫ: у меня сейчас один вопрос остался (пока что ;) ) - насчет блокировки файла - я прав? меня еще смущает место:
нельзя ли в начале закрыть файл, а потом разблокировать а еще слышал что можно и не анлочить файл, что при завершении работы скрипта там все на автомате анлочится (вполне реалистично, например юзер закрыл окно до того как скрипт закончил работу - нужно ж заанлочить файл....) -------------------- SEO-мастер |
||||||||||
|
|||||||||||
| Secandr |
|
|||
|
Связист ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4043 Регистрация: 3.8.2003 Где: Russia, Volgograd Репутация: 5 Всего: 39 |
PROme Будь теоретиком, я не мешаю.
Смысл $all[$stroka]="$main[0] $main[1]"; : $all[$stroka]=$main[0]." ".$main[1]; Т.е. Строке $stroka массива $all присвоить значение двух ясеек $main. А если у тебя 3 элемента в строке, тогда как? P.S. Кстати $all[$stroka]=$main[0]." ".$main[1]; - будет быстрее. Ненужно время чтобы парсить "". |
|||
|
||||
| PROme |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
это вопрос? я так понимаю будет
ЗЫ: к стати, а ты прав, работает на 5...7% быстрее моего
так кто че хорошего скажет по поводу блокировки файла? -------------------- SEO-мастер |
||||||||
|
|||||||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Здесь проблема, ты прочел файл, а затем блокируешь, т.е. два скрипта могут одновременно прочесть файл, а затем кто-то первый его заблокирует. Последний перепишет все результаты и выйдет так, что первый скрипт как будто не работал. Xотя в твоем случае это неважно. Блокировки: LOCK_SH - другие могут читать, но не могут писать в файл LOCK_EX - всем облом, выстраиваются в очередь LOCK_UN - снять блокировку При закрытии файла блокировка автоматически снимается. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| PROme |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 23.7.2003 Где: Kiev Репутация: -1 Всего: 1 |
:-/ хочешь сказать что проблема в том... есть файл:
скрипт1 отработал, получили
$s1 - значение с первого скрипта а потом пошел 2-й и сделал:
т.е затер то что делал первый если так, то все ок, мы просто не поняли друг друга - такая ситуация, что скрипты будут изменять одни и те же данные - просто невозможна - по задумке елемент может изменяться только один раз... 1) значит приведенный выше скрипт не может привести к потере вследствии паралельной работе 2) анлок перед закрытием файла можно смело убирать 3) ну, если не будет проблем с многочислеными знаками окончания строки в одной строке, то топик можно считать УСПЕШНО за вершенным 4) если кто еще может подсказать как ускорить или оптимизировать
жду с нетерпением. 5) еще один интересный момент: скрипт1 читает:
но файл немалый, нужно некоторое время... в это время паралельно работающий скприт2 доходит до выполнения:
скрипт1 будет обломан на пол пути до окончания чтения или скрипт2 подожет пока будолага дочитает просто если скрипт2 (ой, боюсь...) не станет ждать никого... скрипт1 прочитает не ту инфу (скорее всего не полностью дочитает), а ведь после того как скрипт2 запишет ВЕРНЫЕ измененные данные, первыйскрипт примется за свою грязную работу и затрет файл своими НЕВЕРНЫМИ прочитаными (недочитаными) данными возможно ли такое 6) ОГРОМНОЕ ВПАСИБО ВСЕМ КТО ОТВЕЧАЛ!!! -------------------- SEO-мастер |
||||||||||||||
|
|||||||||||||||
| Guest |
|
|||
|
Unregistered |
Оба скрипта смогут прочесть файл паралельно, никто никого не обломит! Только при записи ты накладываешь блокировку. Кто не успел ждет(по умолчанию). Прикол что один будет ждать блокировки пока другие не дочитают весь файл, тогда получится n процессов имеющих одинаковые данные, тогда все будут думать что у них самые свежие данные, тогда n процессов дргу задружкой(вот здесь ты используешь блокировку) запишут свои данные, тогда создастся иллюзия как будто работал только один(самый последний) процесс. А почему бы тебе не прочесть файл через fopen()->flock()->fread()->explode(), тогда файл будет заблокирован в самом начале. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 4 Всего: 317 |
Елки, этот Guest был я
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
если хочешь на Perl создай тему в соответствующем разделе
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
| ElectricalStorm |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
вот на Perl (плохое решение)
-------------------- Нужно знать инструмент, которым пользуешься |
||||
|
|||||
| ElectricalStorm |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 547 Регистрация: 22.1.2004 Репутация: нет Всего: 9 |
вот маленько получше
если ты хочешь с массивом
-------------------- Нужно знать инструмент, которым пользуешься |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |