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

Форум PHP

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

 

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

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

тема: Падают топики

Сообщения:  [1-6] 

 
 автор: cheops   (24.10.2004 в 21:52)   письмо автору
 
   для: goodwill   (24.10.2004 в 21:36)
 

Ну хорошо, я бы модифицировал скрипт записи следующим образом:
<?php
  
function work_with_file($file$string$open)
  {
    
// Открываем файл
    
if($open_file=@fopen($file$open))
    {
      
// В течении 10 секунд пытаемся получить
      // эксклюзивный доступ к файлу
      
for($i 0$i<10; ++$i
      { 
        
// Как только доступ получен покидаем цикл
        
if(flock($open_fileLOCK_EX)) break(); 
        
// Задерживаем время выполнения программы на 1 секунду
        // Если доступ получить не удалось 
        
else sleep(1); 
      }
      
// Записываем строку в файл
      
fwrite($open_file$string);
      
// Очищаем буфер записи
      
flush($open_file);
      
// Переводим файл из лочённого состояния
      // в обычное
      
flock($open_fileLOCK_UN);
      
// Закрываем файл
      
fclose($open_file);
      
// Покидаем функцию
      
return true;
    }
    else
    {
      
error("Нет доступа к файлу или он не существует!"$file);
      return 
false;
   }
 }
?>

   
 
 автор: goodwill   (24.10.2004 в 21:36)   письмо автору
 
   для: cheops   (24.10.2004 в 21:32)
 

хотелось подробней

   
 
 автор: cheops   (24.10.2004 в 21:32)   письмо автору
 
   для: goodwill   (24.10.2004 в 21:08)
 

Здесь приведён скрипт не полностью, а лишь способы обработки лочения - если функция flock() при эксклюзивном доступе к файлу не может получить доступ (в него пишет другой поток) возвращается false, при этом сам скрипт выполняется дальше - так теряются данные. Двумя постами выше фрагменты, которые следует вставить в исходный скрипт записи.

   
 
 автор: goodwill   (24.10.2004 в 21:08)   письмо автору
 
   для: cheops   (24.10.2004 в 18:05)
 

даже открытия файла нет! Как же ты будешь записывать, по какому указателю???

   
 
 автор: cheops   (24.10.2004 в 18:05)   письмо автору
 
   для: goodwill   (24.10.2004 в 17:28)
 

Хм... а симптомы какие, и как выражается падение топиков? Дело в том, что лочение файлов эксклюзивное и пока один поток пишет, другой не получит доступа и просто пройдёт мимо. Попробуйте проверять успешность лочения
<?php
  
if(flock($open_fileLOCK_EX))
  {
    
fwrite($open_file$string);
    
flush($open_file);
    
flock($open_fileLOCK_UN);
  }
  else
  {
    echo 
"Ваш топик пропал, так как кто-то другой занял файл форума";
    exit();
  }
?>

Можно так же рискнуть осуществлять попытки залочить файл в цикле:
<?php
  
for($i 0$i<10; ++$i)
  {
     if(
flock($open_fileLOCK_EX)) break();
     
// Задерживаем время выполнения программы на 1 секунду
     
else sleep(1);
  }
?>

   
 
 автор: goodwill   (24.10.2004 в 17:28)   письмо автору
 
 

Форум на PHP без MySQL
падают топики что-то с flock

Код:
function work_with_file($file, $string, $open){
if($open_file=@fopen($file, $open)){
flock($open_file, LOCK_EX);
fwrite($open_file, $string);
flush($open_file);
flock($open_file, LOCK_UN);
fclose($open_file);
return true;
}else{
error("Нет доступа к файлу или он не существует!", $file);
return false;
}
}

это функция, и этот параметр передается через переменную $open

   

Сообщения:  [1-6] 

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

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