Файл не может быть запущен при одновременной загрузке через FTP - PullRequest
2 голосов
/ 28 июня 2011

Не уверен, что это связано с сервером или нормальное поведение, но я подумал, что спросить. Я управляю веб-сайтом с относительно высоким трафиком (200 тыс. + Уникальных страниц в неделю), и мы предоставляем множество ссылок через файл PHP, содержащий перенаправления.

Единственная проблема в том, что мне нужно часто обновлять этот файл, что я делаю через SFTP. Размер файла составляет около 800 КБ, загрузка занимает около секунды. Однако пользователи сообщили мне, что иногда ссылки, перенаправленные через файл PHP, не работают, и я понял, что это происходит только тогда, когда я загружаю или скачиваю файл через SFTP.

Итак, мой вопрос: Можно ли как-нибудь сохранить файл исполняемым для пользователей, пока я загружаю его новые копии через FTP? Это время простоя для моих пользователей. Это какой-то параметр в Linux, о котором я не знаю, или я ничего не могу с этим поделать? Если это имеет значение, мой сервер работает под управлением Centos.

Ответы [ 4 ]

3 голосов
/ 28 июня 2011

Загрузите его как другое имя файла, а затем переименуйте, чтобы заглушить старое. Загрузка занимает значительное время (если что-то кроме «мгновенного» является значительным). переименование (или mv) является атомарным и не заставит ваших пользователей ждать. Загрузка файла может занять столько же времени, сколько вам нужно, а затем за доли секунды переименовать его.

2 голосов
/ 28 июня 2011

Проблема в том, что передача файлов не является атомарной.Он перезаписывает файл по мере его загрузки.Это приводит к тому, что файл является неполным, если файл загружен за это время.

Если вы загрузите файл в другое место, а затем переместите файл в его правильное местоположение после завершения загрузки, вы замените файл атомарно.

1 голос
/ 28 июня 2011

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

1 голос
/ 28 июня 2011

Pmivdb на самом деле есть.Загрузите его во временный файл, затем переименуйте его (обязательно сохраните копию старого).Это действительно ваш лучший (только?) Вариант.

...