Одновременное редактирование файла file_put_contents()

Gizbo

Новичок
Добрый день. Подскажите пожалуйста. Имеется два разных пользователя. Они одновременно запускают через сайт скрипты на редактирование одного и того же файла, с помощью file_put_contents(). Как поведет себя сервер?
1. Выполнит запись в файл поочередно?
2. Выдаст одному из пользователей ошибку, так как файл уже был открыт другим пользователем?
 

AnrDaemon

Продвинутый новичок
Как напишете, так и поведёт.
Большой вопрос, почему вы вообще используете файл, и почему пишете в него с двух рук. Заняться больше нечем, или мозги продали в оплату за жильё и еду?
 

Gizbo

Новичок
Как напишете, так и поведёт.
Большой вопрос, почему вы вообще используете файл, и почему пишете в него с двух рук. Заняться больше нечем, или мозги продали в оплату за жильё и еду?
Да я недостаточно опытный просто.
Задача редактировать файл .htaccess для добавления доступа по IP адресу к конкретной папке. Пользователю файлы в папке открываются только тогда, когда он заходит на определенную страницу сайта. Когда сессия заканчивается, его IP адрес удаляется.
Может я не тем путем пошел? Нужно реализовать доступ только авторизованному пользователю и только на момент сессии.

По поводу "Как напишете" - нужно в php записать ожидание, пока файл освободится?
 

Gizbo

Новичок
Если использовать флаг LOCK_EX в file_put_contents() для закрытия доступа, к редактированию, то у другого пользователя просто вылезет ошибка доступа к файлу?

И еще один момент - правильно я понимаю, что file_put_contents перезаписывает файл полностью, а не просто редактирует строчку?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Пользователю файлы в папке открываются только тогда, когда он заходит на определенную страницу сайта. Когда сессия заканчивается, его IP адрес удаляется.
Нужно реализовать доступ только авторизованному пользователю и только на момент сессии.
Для этого не нужен .htaccess. Можно писать IP адрес пользователя в сессиию, и отдавать файл из PHP-скрипта, перед отдачей проверив наличие IP в сессии.
 

Gizbo

Новичок
Для этого не нужен .htaccess. Можно писать IP адрес пользователя в сессиию, и отдавать файл из PHP-скрипта, перед отдачей проверив наличие IP в сессии.
Вы имеете ввиду через readfile? Файлы большие (примерно 200-300мб), это не будет перегружать сервер по сравнению с обычной отдачей?
 

whirlwind

TDD infected, paranoid
Это .htaccess на 200-300мб? омг. очевидно же нужно искать другое решение
 

Gizbo

Новичок
Проблема в том, что к настройкам сервера хостер не даст доступ.
А как по поводу решения запрета доступа через mod_rewrite в htaccess? Давать доступ к файлу только с конкретного http_referer? А этим http_referer будет страница, к которой у пользователя будет даваться доступ только php скриптом.
Насколько просто, или как это можно будет сделать?
 
Последнее редактирование:

AnrDaemon

Продвинутый новичок
Хватит уже пихать mod_rewrite во все щели.
Купите нормальный хостинг и кончайте заниматься ментальной мастурбацией.
 

Gizbo

Новичок
На самом деле я не сомневаюсь тут ни в чьей правоте. Обязательно возьму на заметку и реализую. Но именно сейчас приходится работать с тем, что есть.
 

whirlwind

TDD infected, paranoid
Отдавай файл скриптом и не парься. Только блоками читай
Про заголовки почитай. Там chunks или partial всякое такое не помню точно.
Сильно много нагрузки отдача занимать не будет. Блочное чтение делегируруется сисколам и фактически получится то же самое что сервер делает.
 

Gizbo

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

Gizbo

Новичок
Либо учитесь понимать прочитанное, либо забывайте то, что "где-то прочитали". Чем скорее, тем лучше.

fpassthru()
Да это понятно. Слишком много информации приходится перерабатывать в последнюю неделю, не все улавливается. Тоже спасибо за наводку.
 
Сверху