Кэширование данных запроса file_get_contents на php?

Здравствуйте!

С php ранее толком не работал. Не пользуюсь никаким фреймворком.
У меня возникла проблема следующего рода.

У меня есть скрипт, который согласно полученному get параметру делает запрос на чтение файла. Путь запроса зависит от get переменой.

Т.е.
запрос к скрипту вида:

/myscript.php?findMeThat

запускает на сервере другой запрос на получение содержимого файла:

externalFile.hosting.com?q=findMeThat

Это проксирование запроса нужно, т.к. сервер отправляет ещё некоторую авторизационную информацию.

Пусть сервер, с которого отправляется запрос (где лежит мой скрипт) будет server1.
Удалённый сервер-ответчик - server2.

Запросы, которые я присылаю на вход скрипту могут повторяться. Ответы меняются раз в несколько суток.

При таком подходе у меня возникла проблема :

При частом обращении к server1, server2 блочит server1 за флуд.
Нужно, что бы запросы, приходящие к server1, отправлялись на server2 только в случае необходимости.
А если запрос на server1 в течении, скажем, дня, уже обрабатывался - отдавать ему содержимое ответа без запроса к server2.

Прошу помощи, всё-таки, больше в реализации, но буду рад услышать мнения и об общей организации системы.
  • Вопрос задан
  • 3298 просмотров
Решения вопроса 1
@lubezniy
Сразу оговорюсь: применимо только если не критично, если server1 отдаст более старый файл, чем тот, что только что положили на server2.
Если объёмы файлов и количество оных невелики, расширение memcache и сервер memcached рулят. Скрипт получает запрос, проверяет на memcached, есть ли файл по такому-то параметру. Если есть, отдаёт. Нет - скачивает запросом с server2 , пишет в memcached с заданным сроком актуальности и отдаёт запрашивающему. При больших файлах лучше подобным же образом организовать хранилище на диске сервера.
Если сервер полностью под контролем, можно, например, по крону раз в сутки скачивать файлы, сохранять их себе и из своего скрипта при обращении отдавать.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
deadbyelpy
@deadbyelpy
веб-шмеб
Когда случилась похожая проблема, дабы не обвешиваться зависимостями, перед отправкой (в вашем случае на server2) запроса проверяем дату последнего редактирования файла с помощью filemtime Если дата за сегодняшний день, запрос не делаем, отдаем что на сервере1. Иначе делаем запрос.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы