|
|
|
| Как открыть файл один раз?
Т.е. грубо говоря есть с десяток скриптов, которые берут начальную инфу из какого то файла, и если первый скрипт открыл файл, то остальные запущенные скрипты должны ждать пока первый закончит работу с файлом... Как такое сделать? Скорее всего надо какие то атрибуты или права выставлять файлу, но какие и как? | |
|
|
|
|
|
|
|
для: pina
(28.09.2008 в 00:56)
| | Большой-ли файл ?
Почему скрипты блокируют его до завершения работы, а не на время считывания ?
режимов чтобы не читать из файловой системы нет , кроме хранения данных в оперативной памяти | |
|
|
|
|
|
|
|
для: pina
(28.09.2008 в 00:56)
| | Используйте flock.
По ссылке есть пример и описание функции. | |
|
|
|
|
|
|
|
для: ddhvvn
(28.09.2008 в 10:04)
| | flock() наверное не то , тут как-раз обратное, нужно снизить время на которое занят один и тот-же файл
EXP как всегда невнимательно читал вопрос, или внимательно прочитал , но забыл в процессе ответа ;)
А так, зависит от того, для чего этот файл скриптам, если просто считывается , то это не слишком много занимает времени , если ещё обработка всех данных идёт после считывания и закрытия файла, с includе() тоже всё быстро происходит.
Пробовал random()'но генерировать имя файла, чтобы везде включать один из нескольких одинаковых файлов,,
не заметил особой разницы во времени генерации страниц, или недостаточно много смог запустить одновременных обращений.
Если файл нужен для чтения и записи, то почти ничего нельзя сделать, только по возможности уменьшить время работы с ним.
Заметные задержки из-за такого могут быть только при одновременных штук ста, наверное, перезаписях файла.
Но смотря какой файл , и для чего он. | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 10:55)
| | > flock() наверное не то , тут как-раз обратное, нужно снизить время на которое занят один и тот-же файл
Это как раз то. | |
|
|
|
|
|
|
|
для: BinLaden
(28.09.2008 в 11:17)
| | я говорил о другом
если положить в папку /home/new/public.html/ три файла
test.php
<?
function rfs() {
global $time;
$l = 0;
$path = '/home/new/public_html/';
$f = fopen($path .'tables.sql', 'r');
flock($f, 5);
while($str = fgets($f, 1024))
{
$str = preg_replace('#a|b|c|d|e|f |g|ef|jk|j#i', "\t", $str);
$l += strlen($str);
}
flock($f, 3);
fclose($f);
$f = fopen($path .'count.txt', 'a');
flock($f, 6);
list($m, $tempt) = sscanf(microtime(), '%f %u');
fputs($f, sprintf ("%.7f\n", (($tempt += $m) - $time) ));
flock($f, 3);
fclose($f);
}
$i=0;
while(($i++)<20) {
list($m, $time) = sscanf(microtime(), '%f %u');
$time += $m;
virtual( 'test2.php' );
list($m, $time) = sscanf(microtime(), '%f %u');
$time += $m;
virtual( 'test3.php') ;
}
?>
|
и test2.php , test3.php примерно такого содержания
<?php
register_shutdown_function('rfs');
?><hr/>
|
и считать что файл count.txt
создастся сам или он уже есть с нужными правами
, то запустив и прочитав после этот count.txt всё очвидно )
моё личное мнение что при большой посещаемости не может
не сказаться на скорости включение абсолютно везде одного файла.
если только он небольшой, и надолго не занимается | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 12:55)
| | Зачем вообще блокировать файл tables.sql , если в него никто не вносит изменения? | |
|
|
|
|
|
|
|
для: Trianon
(28.09.2008 в 13:14)
| | говорят что в windows обязательно нужно flock()
но я не думаю что без flock() что-то изменится,
вся надежда на какие-нибудь базы данных :) | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 13:29)
| | >говорят что в windows обязательно нужно flock()
чтобы прочесть файл, который никто не собирается менять?
Больше слушайте всякие бредни. | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 10:55)
| | И как же интересно Вы собрались "снизить" его?
Вам нужна такая функция, чтобы мощность компьютера увеличивалась до такого уровня, чтобы файлы читались мгновенно за верям меньше времени запуска 1 скрипта? )) | |
|
|
|
|
|
|
|
для: ddhvvn
(28.09.2008 в 11:33)
| | я никак не собирался снизить способность системы раздавать файлы в порядке живой очереди
я так и сказал что почти ничего нельзя сделать в случае с перезаписью
но всегда что-то бывает быстрее , например чтение - освобождение и только потом запись,
при одновременном доступе такое возможно с записью каждой программой только в свой участок файла | |
|
|
|
|
|
|
|
для: xx77
(28.09.2008 в 13:00)
| | забыл сказать что файл tables.sql был меньше пяти килобайт | |
|
|
|
|
|
|
|
для: pina
(28.09.2008 в 00:56)
| | Всем спасибо flock то что надо, работает достаточно стабильно | |
|
|
|