- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Переиграть и победить: как анализировать конкурентов для продвижения сайта
С помощью Ahrefs
Александр Шестаков

VK приобрела 70% в структуре компании-разработчика red_mad_robot
Которая участвовала в создании RuStore
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
насколько я изучил документацию, можно использовать LOCK_EX в int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
Описано это так:
LOCK_EX Acquire an exclusive lock on the file while proceeding to the writing.
А где именно про это написано? Я читал здесь - http://docs.php.net/manual/ru/function.file-put-contents.php
Там есть параметр resource $context, но ничего не говорится, что в качестве этого параметра может быть блокировка файлов.
слушайте netwind'а )
у флока минусов по-больше, чем с временным файлом и переименовыванием)
Ну блин. Это же техническая тема. Неужели так трудно перечислить эти минусы, если вы знаете о них? Давайте обсудим.
Там есть параметр resource $context, но ничего не говорится, что в качестве этого параметра может быть блокировка файлов
http://docs.php.net/manual/en/function.file-put-contents.php
Flags
ewg777, спасибо! Зря я значит переделывал свой код с одной удобной строчки на несколько неудобных.
Ну блин. Это же техническая тема. Неужели так трудно перечислить эти минусы, если вы знаете о них? Давайте обсудим.
давайте:
flock нужно вызывать каждый раз при обычном чтении, а атомарное переименование позволяет вообще не париться ни с какими вызовами. Этого мало?
Переименование позволяет в любой момент времени иметь копию кеша доступную для чтения, даже если в данный момент кеш перестраивается. При эксклюзивных блокировках все "читатели" ждут окончания блокировки записи и возможно длительного построения кеша(по крайней мере в вашей реализации). Чем больше программы расходуют времени на ожидание, тем больше ресурсов они задерживают. В масштабе сервера получается больший расход ресурсов.
Вообще-то я надеялся что вы вспомните еще какие-нибудь минусы переименования, помимо привязки этого метода к unix.
netwind, не вспомнил, но подумал сейчас, и вижу одну проблему: c rename теоретически может случиться так, что более старые данные перезапишут более новые. Чтобы этого не происходило, надо блокировать файл, но тогда уже и raname вроде ни к чему :) Возможно, я не прав, тогда объясните почему.
BrokenBrake добавил 03.11.2009 в 19:35
Вообще, если честно, я удивлён, что нужны эти блокировки. Я раньше почему-то был уверен, что PHP должен сам понимать, что если мы пишем файл, не нужно допускать ситуаций с его чтением в тот же момент. То есть я всерьез считал, что эти все блокировки делаются автоматически. И вот, ошибся. Но почему так?
Кто нибудь может сказать, для чего может понадобиться специально чтение/запись без блокировок?
SQLite (база на файлах) работает так.
ewg777, любая БД так работает, насколько мне известно, но причём здесь базы в этой теме? :)
не вспомнил, но подумал сейчас, и вижу одну проблему: c rename теоретически может случиться так, что более старые данные перезапишут более новые. Чтобы этого не происходило, надо блокировать файл, но тогда уже и raname вроде ни к чему Возможно, я не прав, тогда объясните почему
Видимо, это вы о ситуации когда два процесса внезапно и одновременно решают обновить кеш.
Конечно, они поочередно отработают с flock, но ведь это же кеш. Там информация будет отличаться ненамного. По сравнению с общей сложностью flock, для вебсайтов я бы все равно выбрал бы rename.
Вообще, если честно, я удивлён, что нужны эти блокировки. Я раньше почему-то был уверен, что PHP должен сам понимать, что если мы пишем файл, не нужно допускать ситуаций с его чтением в тот же момент. То есть я всерьез считал, что эти все блокировки делаются автоматически. И вот, ошибся. Но почему так?
Путаете с реляционными базами данных.
Кто нибудь может сказать, для чего может понадобиться специально чтение/запись без блокировок?
Отсутствие синхронизации всегда быстрее. Неужели не очевидно.
Видимо, это вы о ситуации когда два процесса внезапно и одновременно решают обновить кеш.
Конечно, они поочередно отработают с flock, но ведь это же кеш. Там информация будет отличаться ненамного. По сравнению с общей сложностью flock, для вебсайтов я бы все равно выбрал бы rename.
Не, я не про кэш, у меня в файл пишутся статистические данные, неплохо бы, чтобы они были точными.
Отсутствие синхронизации всегда быстрее. Неужели не очевидно.
Но при этом при нагрузках всё выше вероятность проблем с потерей данных. Причем, эта вероятность не исчезает полностью - сбой может произойти и при маленькой нагрузке. Не слишком ли дорого обходятся эти микросекунды? Да и не очевидно, если честно.
Не, я не про кэш, у меня в файл пишутся статистические данные, неплохо бы, чтобы они были точными.
так это счетчик просмотров на файлах? Я думал вся затея ради кеширования данных не имеющих "бухгалтерского" значения. rename тут не подходит.
Все же, серьезные сайты используют файлы чаще с целью быстрого доступа к данным - кеширования , а не в качестве основного хранилища. Немного дико такое видеть в наше время.