|
|
|
| Подскажите пожалуйста, какой вариант записи в файл надежней, безопасней и быстрей:
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
}
|
| |
|
|
|
|
|
|
|
для: ValeV
(03.12.2009 в 17:44)
| | Чесно признаться, я не знаю как именно реализована функция file_put_contents(), но одно могу сказать точно. Я специально тестил её на сайте с ооочень большой (до 200 посещений в секунду) нагрузкой. И сбоев не наблюдал.
А вот про блокировку - постоянно идут обсуждения. Что между открытием и блокировкой файла может вклиниться другой процесс. Что собственно и подтверждается практикой. Так что на мой взгляд первый вариант предпочтительнее. (если не учитывать откат к 4-й версии php) | |
|
|
|
|
|
|
|
для: Николай2357
(03.12.2009 в 17:57)
| | Спасибо, а вот еще подскажите, написаны они у меня правильно? | |
|
|
|
|
|
|
|
для: Николай2357
(03.12.2009 в 17:57)
| | блокировкой просто нужно уметь пользоваться, как впрочем и всем остальным. | |
|
|
|
|
|
|
|
для: Valick
(03.12.2009 в 18:29)
| | Так правильно или не правильно написано?(не надо банальностями мусорить) | |
|
|
|
|
|
|
|
для: ValeV
(03.12.2009 в 18:31)
| | нет не правильно... ну а чтоб я тут больше не мусорил.. читайте книги... удачи | |
|
|
|
|
|
|
|
для: Valick
(03.12.2009 в 18:29)
| | Вы про это? Я прекрасно помню Ваш скрипт - еще раз спасибо, пользуясь случаем. Но вопрос был - что предпочтительнее. Ведь факт, что file_put_contents() в пятой версии ввели не просто так. Значит лучше пользоваться тем, что новее... | |
|
|
|
|
|
|
|
для: Николай2357
(03.12.2009 в 19:06)
| | Николай, Вы прекрасно знаете, что меня мёдом не корми, а дай поспорить. вот я и спорю.
Значит лучше пользоваться тем, что новее..
трижды нет... нужно пользоваться тем что лучше подходит для решения конкретной задачи
а вот какая задача стоит у автора топика абсолютно неизвестно, да еще хватает наглости обвинять меня в банальностях. | |
|
|
|
|
|
|
|
для: Valick
(03.12.2009 в 19:17)
| | Valick, покиньте мою ветку | |
|
|
|
|
|
|
|
для: ValeV
(03.12.2009 в 19:33)
| | > Valick, покиньте мою ветку
охохо..ахаха.. | |
|
|
|
|
|
|
|
для: Николай2357
(03.12.2009 в 19:06)
| | file_put_contents Функция идентична последовательному вызову функций fopen(), fwrite() и fclose()
Так сказано в докуметации.
Как решены вопросы блокировки - не известно.
Вы ставили эксперимент:(до 200 посещений в секунду) .
Это здорово.
А какое из них число записей и чтения?
Если только чтение, то думаю вывод сомнительней.
По-поводу пятой версии, возможно (скорее всего так)Вы правы.
Но хотелось бы обоснованности и аргументации. | |
|
|
|
|
|
|
|
для: Николай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.
|
Мой вопрос о сравнении разных способов записи
| , без разбавления личным кодом.
Код умышленно урезан до не рабочих кусков, что-бы обратить внимание на
разные функции(способы) записи в файл. | |
|
|
|
|
|
|
|
для: Николай2357
(03.12.2009 в 17:57)
| | Поздравляю Вас Николай2357, Вы правы | |
|
|
|