Как лучше изменять php-файлы на рабочем проекте?

Имеется сайт, на котором, одновременно сидят, например 100 чел.
Задача, - изменить некоторые скрипты php так, что бы в момент откачки данного файла на сервер, у пользователя, который как раз в этот же момент открывал сайт - не вылетел Fatal error.
Подскажите пожалуйста, какие варианты выполнения данной задачи есть и в какую сторону лучше всего копать...
Спасибо.

UPD. Основная проблема в том, что файл откачивается например через FTP Notepad++, и частенько (я смотрю по логам) люди попадают на Fatal error, т.к. изменяются файлы, ядра CMS...
При этом, если изменить файл, условно, через Upload php (файл-менеджер CMS) данной проблемы - не возникает...
Вот я и думаю, может для (S)FTP-сервера есть какие-то примочки, которые скажем, буферизируют файл до полной его загрузки на сервер, а затем уже заменяют им конечный файл?
  • Вопрос задан
  • 504 просмотра
Решения вопроса 1
@xtreme
Снимаю порчу по SSH :)
Когда заливаете через CMS, файл по сути заливается во временный файл, а затем происходит move, который, в случае, если временный файл и целевой находятся на одном разделе файловой системы является атомарным (т.е. либо в один момент времени это старый файл, либо новый), либо, если происходит move между разделами - все равно происходит очень быстро.
В случае, когда вы заливаете по ftp - сначала удаляется старый файл, т.е. он становится недоступным, а затем уже начинает подливаться новый. В этот момент и происходит "лажа".
Выходов несколько:
- про первый (не сказал бы, что он очень простой, но все равно довольно эффективный), вам уже написал D' Normalization во втором пункте.
- второй - разливать файлы не по фтп, а, допустим, с помощью rsync из некоей директории, куда вы уже заливаете по ftp. То бишь - залили, проверили, что ничего больше заливать не надо - запустили на сервере rsync из этой директории в продакшн. rsync также копирует различающиеся файлы сначала во временный файл, а затем "мувит" на постоянное место.
- третий - может быть с косяками, использовать, например, opcache в PHP и выставить в параметрах opcache не трогать файл, пока он не состарится, например, на несколько секунд. Секунды определяются эмпирически, в зависимости от скорости вашей заливки.
- четвертый... а фиг знает, придумать можно много всего. Например, хранить файлы в SVN или GIT-репозитории, и по commit/push запускать post-hook, который, например, будет синхронизировать файлы тем же rsync или использовать какой-нибудь Jenkins... масса вариантов, главное не трогать самому файлы продакшна.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 6
Denormalization
@Denormalization
Ой насоветовали..
Существует 2 простых варианта апдейта:
1) Вешаем плашку "Усё пропало. Мы на ремонте.", и пока пользователи в шоке - делаем апгрейд.
2) Учимся использовать симлинки. В соседней папке разворачиваем обновленный проект, и ловким движением руки переключаем симлинк на другую папку.

Если есть много всяких "страшных" способов, но эти два наиболее просты и эффективны.
Ответ написан
Комментировать
MetaDone
@MetaDone
Хорошо сформулированный вопрос - 50% решения
пользователь такого даже не заметит, если конечно у вас файл размером не несколько гигов. Если так - заливайте когда никого нет, и не выводите ошибки на сайте, а пишите их в логи. Пользователь вообще не должен подозревать что сайт может выдавать ошибки.
Если уж совсем необходимо - повесьте табличку "сайт на обслуживании", залейте все нужное и уберите табличку и не делайте проблем на пустом месте
Ответ написан
Комментировать
@galsik
Это можно сделать через управление буфером вывода, php есть такие встроенные функции но если ты задаешь такие вопросы для тебя это будет сложно.
Ответ написан
Я не думаю что это как-то возможно. Конечно, у меня есть предположения:
1. Надо отключить доступ к этому файлу, то есть чтобы обычный пользователь не мог зайти на него, только те, кто пишет скрипты(как вариант: убрать ссылки везде на него, а можно и вовсе подгружать другой документ типа 404 ошибки - такой страницы не существует или же 503 ошибки - страница находится в разработке).
2. Этот способ уже более актуальный - создать на хостинге тестовый домен и именно на этом тестовом домене проводить свои "эксперименты". Как итог получается - вы не трогаете основной сайт, пользователь фаталов ваших не видит но и сайт успешно обновляет файлы, которые вы закинете в случае успеха ваших экспериментов.

НО: если вы просите чтобы именно на этом сайте было и чтобы именно на этой странице было, то тогда подсказать не могу. Так как в любом случае, если Вы ошибетесь где-то и выскочит фатал - вы будете знать в чем ошибка. А отключать это чтобы пользователь не видел и при этом чтобы он видел нормальную страницу - мне кажется невозможно. Ошибки на то и ошибки чтоб вы видели где вы допустили оплошность.
Ответ написан
bigton
@bigton
Web-программист
Вероятность того что один из 100 человек попадет на "белый экран" когда вы будите перезаливать скрипты очень низкая, так что можете не беспокоиться. И можете добавить страницу ошибок типа "Ой! Что-то пошло не так, перезагрузите страницу".
Ответ написан
Комментировать
Залить архивом, на сервере распаковать
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
от 300 000 до 500 000 ₽
07 мая 2024, в 15:47
12000 руб./за проект
07 мая 2024, в 15:10
1500 руб./в час
07 мая 2024, в 15:07
1500 руб./в час