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

Форум PHP

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

 

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

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

тема: Какая запись в файлы безопасней и надежней
 
 автор: ValeV   (03.12.2009 в 17:44)   письмо автору
 
 

Подскажите пожалуйста, какой вариант записи в файл надежней, безопасней и быстрей:
1.
 $str = @file_get_contents( "file.dat") ; 
    if($str_Base)
    { 
        file_put_contents( "file.dat",  $str.$info );
   }

2.
$fd = @fopen("file.dat", "a");
  if(!$fd) 
    exit("Ошибка при открытии файла данных");
  if (flock($fd, LOCK_EX))
  {  
      fwrite($fd, $info);
      flock($fd, LOCK_UN); // release the lock
 }

  Ответить  
 
 автор: Николай2357   (03.12.2009 в 17:57)   письмо автору
 
   для: ValeV   (03.12.2009 в 17:44)
 

Чесно признаться, я не знаю как именно реализована функция file_put_contents(), но одно могу сказать точно. Я специально тестил её на сайте с ооочень большой (до 200 посещений в секунду) нагрузкой. И сбоев не наблюдал.
А вот про блокировку - постоянно идут обсуждения. Что между открытием и блокировкой файла может вклиниться другой процесс. Что собственно и подтверждается практикой. Так что на мой взгляд первый вариант предпочтительнее. (если не учитывать откат к 4-й версии php)

  Ответить  
 
 автор: ValeV   (03.12.2009 в 18:03)   письмо автору
 
   для: Николай2357   (03.12.2009 в 17:57)
 

Спасибо, а вот еще подскажите, написаны они у меня правильно?

  Ответить  
 
 автор: Valick   (03.12.2009 в 18:29)   письмо автору
 
   для: Николай2357   (03.12.2009 в 17:57)
 

блокировкой просто нужно уметь пользоваться, как впрочем и всем остальным.

  Ответить  
 
 автор: ValeV   (03.12.2009 в 18:31)   письмо автору
 
   для: Valick   (03.12.2009 в 18:29)
 

Так правильно или не правильно написано?(не надо банальностями мусорить)

  Ответить  
 
 автор: Valick   (03.12.2009 в 18:38)   письмо автору
 
   для: ValeV   (03.12.2009 в 18:31)
 

нет не правильно... ну а чтоб я тут больше не мусорил.. читайте книги... удачи

  Ответить  
 
 автор: Николай2357   (03.12.2009 в 19:06)   письмо автору
 
   для: Valick   (03.12.2009 в 18:29)
 

Вы про это? Я прекрасно помню Ваш скрипт - еще раз спасибо, пользуясь случаем. Но вопрос был - что предпочтительнее. Ведь факт, что file_put_contents() в пятой версии ввели не просто так. Значит лучше пользоваться тем, что новее...

  Ответить  
 
 автор: Valick   (03.12.2009 в 19:17)   письмо автору
 
   для: Николай2357   (03.12.2009 в 19:06)
 

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

  Ответить  
 
 автор: ValeV   (03.12.2009 в 19:33)   письмо автору
 
   для: Valick   (03.12.2009 в 19:17)
 

Valick, покиньте мою ветку

  Ответить  
 
 автор: neadekvat   (03.12.2009 в 20:05)   письмо автору
 
   для: ValeV   (03.12.2009 в 19:33)
 

> Valick, покиньте мою ветку
охохо..ахаха..

  Ответить  
 
 автор: ValeV   (03.12.2009 в 19:41)   письмо автору
 
   для: Николай2357   (03.12.2009 в 19:06)
 

file_put_contents Функция идентична последовательному вызову функций fopen(), fwrite() и fclose()
Так сказано в докуметации.
Как решены вопросы блокировки - не известно.

Вы ставили эксперимент:(до 200 посещений в секунду) .
Это здорово.
А какое из них число записей и чтения?
Если только чтение, то думаю вывод сомнительней.

По-поводу пятой версии, возможно (скорее всего так)Вы правы.
Но хотелось бы обоснованности и аргументации.

  Ответить  
 
 автор: ValeV   (03.12.2009 в 20:29)   письмо автору
 
   для: Николай2357   (03.12.2009 в 19:06)
 

Вот тут http://softtime.ru/forum/read.php?id_forum=1&id_theme=44056

// Блокируем файл (блокировка с запретом "подвисания")
while(!flock($f, LOCK_EX+LOCK_NB))
{
sleep(1); // ждём одну секунду
}

Это списано у Котерова, PHP 5, 2008, стр. 333.


Мой вопрос о сравнении разных способов записи
, без разбавления личным кодом.
Код умышленно урезан до не рабочих кусков, что-бы обратить внимание на
разные функции(способы) записи в файл.

  Ответить  
 
 автор: ValeV   (03.12.2009 в 22:07)   письмо автору
 
   для: Николай2357   (03.12.2009 в 17:57)
 

Поздравляю Вас Николай2357, Вы правы

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

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