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

Форум PHP

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

 

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

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

тема: роблема с flock...
 
 автор: pnduk   (06.12.2010 в 22:03)   письмо автору
 
 

Здравствуйте!Много раз встречал что в сети говорили о проблеме с flock (ну что оно неработает в многих файловых системах)

flock() не будет работать на NFS и многих других сетевых файловых системах. Обратитесь к документации вашей операционной системы для получения дополнительной информации.

В некоторых операционных системах flock() реализован на уровне процессов. При использовании многопоточных серверных API, таких как ISAPI, вы не можете полагаться на flock() для защиты ваших файлов от дугих PHP-скриптов, которые работают в параллельном потоке на том же сервере!

flock() не поддерживается на старых файловых системах вроде FAT и его производных, так что всегда будет возвращать FALSE в этом окружении (это особенно касается пользователей Windows 98).


И многие говорят что их баззы на текстовых файлах стираются.
У многих есть "готовые решения" например:

function S_fw ($COUNT_FILE, $text)
{
$z=rand (0,100000);
$fp = @fopen($COUNT_FILE.".".$z, "wb+"); 
@fwrite($fp,$text);
@fclose($fp); 
if (@rename ($COUNT_FILE.".".$z, $COUNT_FILE)==false)
{
@unlink ($COUNT_FILE);
@rename ($COUNT_FILE.".".$z, $COUNT_FILE);
}
}


или

function WriteToFile ($path_to_file,$data) {
    $lock = fopen(PATH_BLOCKFILE,"a");
    if(flock($lock, LOCK_EX)) {
        $tmp=fopen(PATH_TEMPFILE,"w");
        for($i=0;$i<count($data);$i++) {
            fputs($tmp, "$data[$i]\n");
        }
        fclose($tmp);
        unlink("$path_to_file");
        rename(PATH_TEMPFILE, "$path_to_file");
        flock($lock, LOCK_UN);
        fclose($lock);
    }
}


Последный показался более понятным, но я никак немогу записать данные построчно в файл баззу(каждый раз продолжать записи).Помогите пожалуйста осуществить это.(По моему проблема в том что каждый раз когда открываем PATH_TEMPFILE то очищаем ее а после rename в баззу записивается то что находиться в PATH_TEMPFILE... )
Вместо этого:
$fp = fopen("data.txt", "a");
fwrite($fp,"$text\r\n");
fclose ($fp);
хочу использовать более безопасный метод.
Как Вы боретесь с этим???

  Ответить  
 
 автор: Красная_шляпа   (06.12.2010 в 22:40)   письмо автору
 
   для: pnduk   (06.12.2010 в 22:03)
 

дата это массив может поэтому не можешь?

  Ответить  
 
 автор: makigo   (07.12.2010 в 11:20)   письмо автору
 
   для: Красная_шляпа   (06.12.2010 в 22:40)
 

Думаю нет!Могу и просто текст записать.А вы нестолкнулись с такой проблемой?Или вы с sql работайте.

  Ответить  
 
 автор: softtime.ru   (07.12.2010 в 11:22)   письмо автору
 
   для: makigo   (07.12.2010 в 11:20)
 

нет не сталкивался на линуксах и прочих униксах все прекрасно работает

  Ответить  
 
 автор: makigo   (07.12.2010 в 13:22)   письмо автору
 
   для: softtime.ru   (07.12.2010 в 11:22)
 

Очень много слышал про такое.Думаю простой скрипт комментариев сделать но как то не решаюсь.

  Ответить  
 
 автор: softtime.ru   (07.12.2010 в 14:39)   письмо автору
 
   для: makigo   (07.12.2010 в 13:22)
 

а ты не думай делай, всё работает как надо

  Ответить  
 
 автор: makigo   (08.12.2010 в 13:29)   письмо автору
 
   для: softtime.ru   (07.12.2010 в 14:39)
 

Thanks a lot!

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

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