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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Проблема с созданием txt на сервере

Сообщения:  [1-10]   [11-12] 

 
 автор: ddhvvn   (06.11.2008 в 17:47)   письмо автору
 
   для: Владимир55   (06.11.2008 в 13:35)
 

Я если честно использовал этот скрипт всего пару раз и давно. Поэтому не задумывался наж этим.))
Просто так же как и Вы "содрал" с софтайма =)))

А насчет отпирания может Вы проглядели? )
Файл должен отпираться той же функцией flock со вторым параметром LOCK_UN

  Ответить  
 
 автор: ч   (06.11.2008 в 14:21)
 
   для: Владимир55   (06.11.2008 в 13:35)
 

история умалчивает о том чего ждал автор кода )

например у меня на денвере под виндоввс вообще странные результаты показывает например такой тест:

три файла иммитируют два обращения к файлу и немного запутанно register_shutdown_function()

test.php
<?
echo time() .'<hr>';
virtual('test1.php');

$f=fopen('test.txt'"r+t");
if(
$f) echo 'файл открыт ' time() .'<hr>';
else die(
"Невозможно открыть файл");

if ( 
flock($fLOCK_EX+LOCK_NB)) echo 'файл заблокирован ' time() .'<hr>';
else die(
"Невозможно открыть файл");

?>
<hr>


test1.php

<?
function blf() {
$f2=fopen('test.txt'"r+t");
flock($f2LOCK_EX+LOCK_NB);
sleep(20);
}

register_shutdown_function('blf');
?>
скрипт test1.php отработал запустилась blf()<hr>


test.txt

test.txt


Немогу понять почему результат именно такой

1225970322
--------------------
скрипт test1.php отработал запустилась blf()
------------------------------
файл открыт 1225970322
------------------------------------
файл заблокирован 1225970322
-----------------------------------

Warning: fopen(test.txt): failed to open stream: No such file or directory in ...........l\test1.php on line 3 

Warning: flock() expects parameter 1 to be resource, boolean given in ...................l\test1.php on line 4


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

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 13:35)   письмо автору
 
   для: ddhvvn   (06.11.2008 в 13:30)
 

А есть смысл в этом ожидании?
Ведь процессы идут непрерывно, так за ту секунду, что вы его ждете, файл может освободиться, но его могут занять вновь!

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

Разве не так?


А почему в конце нет разблокирования файла? Разве разблокировка не нужна?

  Ответить  
 
 автор: ddhvvn   (06.11.2008 в 13:30)   письмо автору
 
   для: Владимир55   (06.11.2008 в 13:25)
 

>...Чего он ждет?

Когда файл освободится =)
Конечно 1 сек многовато, но это минимальный отрезок времени, который можно задать.

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 13:25)   письмо автору
 
   для: AcidTrash   (06.11.2008 в 13:19)
 

Стало быть в первоисточнике, на который я сослался в первом сообщении, ошибка. А то я подумал, что, может быть, это какая-то хитрость программирования, которую я не знаю...

Скажите, а для чего автор сделал

while(!flock($f, LOCK_EX+LOCK_NB)) sleep(1);    // ждём одну секунду

Чего он ждет?

И почему нет разблокировки файла? Разве она не нужна?

  Ответить  
 
 автор: AcidTrash   (06.11.2008 в 13:19)   письмо автору
 
   для: Владимир55   (06.11.2008 в 13:08)
 

>$count=fread($f,0);
Всегда считал, что второй параметр указывает количество байт, которое нужно прочитать.
У вас же этот параметр 0, т.е. прочитать ноль байт.

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 13:08)   письмо автору
 
   для: ч   (06.11.2008 в 12:45)
 

Код не мой, и чем дольше я в нем копаюсь, тем меньше его понимаю...

  Ответить  
 
 автор: ч   (06.11.2008 в 12:45)
 
   для: Владимир55   (06.11.2008 в 12:23)
 

мне больше странной показалась строка
>> while(!flock($f, LOCK_EX+LOCK_NB)) sleep(1);
почему sleep(1); ?

fread здесь как-то логичнее т.к. сразу после чтения делается перезапись файла

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 12:23)   письмо автору
 
   для: ч   (06.11.2008 в 12:14)
 

Да, я откорректировал свой вопрос, чтобы выделить его сущность.

  Ответить  
 
 автор: ч   (06.11.2008 в 12:14)
 
   для: ч   (06.11.2008 в 12:08)
 

код был изменён rкак мне показалось

  Ответить  

Сообщения:  [1-10]   [11-12] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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