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

Форум PHP

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

 

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

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

тема: Прошу проверить код хранения информации
 
 автор: Владимир55   (06.11.2008 в 15:07)   письмо автору
 
 

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

Компиллиуя из того, что представлено на Форуме, я сделал вот такой код:


    $adr = "vopros.txt" ;

    if(!file_exists($adr))  fclose(fopen($adr, "a+t")); // Создаём файл если он не существует
    $f=fopen($adr, "r+t") ; // Открываем файл для чтения и записи в режиме r+t
    flock($f, LOCK_EX); // Блокируем файл эксклюзивно
    // Файл заблокирован, можно читать и записывать


    $filesize = (filesize ($adr) +10);
    echo  $filesize ;
    $text = fread($f, $filesize);      // Чтение содержимого файла
    $text .= "-xxххх";                 // Операция с текстом (или с числом)


    // Сохраняем информацию
    ftruncate($f,0);                // очищаем файл
    rewind ($f);                    // переводим указатель в начало файла
    fwrite($f,$text);                // записываем новое значение
    fclose($f);                        // закрываем файл
    flock($f, LOCK_UN);             // отпираем файл



В той связи два вопроса к гуру:
1. Правильно ли здесь сделана блкировка файла? Обеспечивается ли достоверность информации?
2. Что не так в последней строке? При ее работе возникает вот такое диагностическое сообщение: "Warning: flock(): 5 is not a valid stream resource...".

  Ответить  
 
 автор: sim5   (06.11.2008 в 15:10)   письмо автору
 
   для: Владимир55   (06.11.2008 в 15:07)
 

Вы освободили ресурс (закрыли файл), а потом пытаетесь изменить доступ к нему, поэтому и ошибка.

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 15:14)   письмо автору
 
   для: sim5   (06.11.2008 в 15:10)
 

То есть, после выполнения fclose($f) блокировка доступа к текстовому файлу снимается автоматически и оператор flock($f, LOCK_UN) является лишним?

  Ответить  
 
 автор: sim5   (06.11.2008 в 15:32)   письмо автору
 
   для: Владимир55   (06.11.2008 в 15:14)
 

Надо так:
flock($f, LOCK_UN); // отпираем файл
fclose($f); // закрываем файл

  Ответить  
 
 автор: Владимир55   (06.11.2008 в 15:58)   письмо автору
 
   для: sim5   (06.11.2008 в 15:32)
 

Вот оно как сложно!

Спасибо!

  Ответить  
 
 автор: ddhvvn   (06.11.2008 в 17:51)   письмо автору
 
   для: Владимир55   (06.11.2008 в 15:58)
 

Опоздал... зря отписывался в прошлой теме, Вы и сами уже все поняли ))))

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

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