Обслуживание файла через скрипт PHP и безопасная замена этого файла на лету - PullRequest
0 голосов
/ 15 июня 2010

Мой PHP-скрипт обслуживает файлы, используя readfile () и добавленные вручную HTTP-заголовки. Файлы имеют размер ~ 1 МБ, поэтому частичное чтение не требуется.

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

Платформа: Linux, PHP 5, Apache 2.

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Использовать нумерацию версий в имени файла:

$candidates=sort(glob($dir . $prefix . '*'));
$most_recent=array_pop($candidates);

например, file0001.pdf file0002.pdf file0003.pdf

C.

1 голос
/ 15 июня 2010

Вы можете использовать flock для получения блокировки дескриптора файла - это будет означать, что процесс записи будет блокироваться до тех пор, пока он не сможет получить эксклюзивную блокировку.

Итак, ваши читатели получат общую блокировку LOCK_SH, а затем просто используют fpassthru для вывода файла и, наконец, снимают блокировку.

Запись получит эксклюзивную блокировку LOCK_EX, выполнит безопасную запись, а затем снимет блокировку, позволяющую любым заблокированным считывателям начать извлечение нового файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...