Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Открыть файл один раз
 
 автор: pina   (28.09.2008 в 00:56)   письмо автору
 
 

Как открыть файл один раз?

Т.е. грубо говоря есть с десяток скриптов, которые берут начальную инфу из какого то файла, и если первый скрипт открыл файл, то остальные запущенные скрипты должны ждать пока первый закончит работу с файлом... Как такое сделать? Скорее всего надо какие то атрибуты или права выставлять файлу, но какие и как?

  Ответить  
 
 автор: EXP   (28.09.2008 в 02:40)   письмо автору
 
   для: pina   (28.09.2008 в 00:56)
 

Большой-ли файл ?
Почему скрипты блокируют его до завершения работы, а не на время считывания ?
режимов чтобы не читать из файловой системы нет , кроме хранения данных в оперативной памяти

  Ответить  
 
 автор: ddhvvn   (28.09.2008 в 10:04)   письмо автору
 
   для: pina   (28.09.2008 в 00:56)
 

Используйте flock.
По ссылке есть пример и описание функции.

  Ответить  
 
 автор: xx77   (28.09.2008 в 10:55)   письмо автору
 
   для: ddhvvn   (28.09.2008 в 10:04)
 

flock() наверное не то , тут как-раз обратное, нужно снизить время на которое занят один и тот-же файл

EXP как всегда невнимательно читал вопрос, или внимательно прочитал , но забыл в процессе ответа ;)

А так, зависит от того, для чего этот файл скриптам, если просто считывается , то это не слишком много занимает времени , если ещё обработка всех данных идёт после считывания и закрытия файла, с includе() тоже всё быстро происходит.
Пробовал random()'но генерировать имя файла, чтобы везде включать один из нескольких одинаковых файлов,,
не заметил особой разницы во времени генерации страниц, или недостаточно много смог запустить одновременных обращений.
Если файл нужен для чтения и записи, то почти ничего нельзя сделать, только по возможности уменьшить время работы с ним.
Заметные задержки из-за такого могут быть только при одновременных штук ста, наверное, перезаписях файла.
Но смотря какой файл , и для чего он.

  Ответить  
 
 автор: BinLaden   (28.09.2008 в 11:17)   письмо автору
 
   для: xx77   (28.09.2008 в 10:55)
 

> flock() наверное не то , тут как-раз обратное, нужно снизить время на которое занят один и тот-же файл

Это как раз то.

  Ответить  
 
 автор: xx77   (28.09.2008 в 12:55)   письмо автору
 
   для: 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($f5);
while(
$str fgets($f1024))
{
$str preg_replace('#a|b|c|d|e|f |g|ef|jk|j#i'"\t"$str);
$l += strlen($str);
}
flock($f3);
fclose($f);

$f fopen($path .'count.txt''a');
flock($f6);
list(
$m$tempt) = sscanf(microtime(), '%f %u');
fputs($fsprintf ("%.7f\n", (($tempt += $m) - $time) ));
flock($f3);
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 всё очвидно )

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

  Ответить  
 
 автор: Trianon   (28.09.2008 в 13:14)   письмо автору
 
   для: xx77   (28.09.2008 в 12:55)
 

Зачем вообще блокировать файл tables.sql , если в него никто не вносит изменения?

  Ответить  
 
 автор: xx77   (28.09.2008 в 13:29)   письмо автору
 
   для: Trianon   (28.09.2008 в 13:14)
 

говорят что в windows обязательно нужно flock()
но я не думаю что без flock() что-то изменится,
вся надежда на какие-нибудь базы данных :)

  Ответить  
 
 автор: Trianon   (28.09.2008 в 13:39)   письмо автору
 
   для: xx77   (28.09.2008 в 13:29)
 

>говорят что в windows обязательно нужно flock()
чтобы прочесть файл, который никто не собирается менять?
Больше слушайте всякие бредни.

  Ответить  
 
 автор: ddhvvn   (28.09.2008 в 11:33)   письмо автору
 
   для: xx77   (28.09.2008 в 10:55)
 

И как же интересно Вы собрались "снизить" его?

Вам нужна такая функция, чтобы мощность компьютера увеличивалась до такого уровня, чтобы файлы читались мгновенно за верям меньше времени запуска 1 скрипта? ))

  Ответить  
 
 автор: xx77   (28.09.2008 в 13:00)   письмо автору
 
   для: ddhvvn   (28.09.2008 в 11:33)
 

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

  Ответить  
 
 автор: xx77   (28.09.2008 в 13:05)   письмо автору
 
   для: xx77   (28.09.2008 в 13:00)
 

забыл сказать что файл tables.sql был меньше пяти килобайт

  Ответить  
 
 автор: pina   (28.09.2008 в 14:17)   письмо автору
 
   для: pina   (28.09.2008 в 00:56)
 

Всем спасибо flock то что надо, работает достаточно стабильно

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования