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

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

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

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

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

/myscript.php?findMeThat

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

externalFile.hosting.com?q=findMeThat

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

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

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

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

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

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

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

Похожие вопросы