2014-01-13 2 views
0

У меня возникли некоторые проблемы с использованием GAE PHP как простой прокси с помощью «file_get_contents»кэш файлов в GAE PHP

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

$result = file_get_contents('http://example.com/'.$url); 

Временное решение, которое я нашел, чтобы добавить случайную переменную в конце строки запроса, что позволило мне получить новую версию файла каждый раз, когда:

$result = file_get_contents('http://example.com/'.$url.'?r=' . rand(0, 9999)); 

Но этот трюк не работает для вызовов api с параметрами, например.

Я попытался отключить кеш APC в php.ini из gae (используя apc.enabled = "0"), и я использовал clearstatcache(); в моем скрипте, но не работает.

Любые идеи?

Спасибо.

ответ

3

Как описано в appengine documentation, http-обтекатель использует urlfetch. Поскольку seen in another questionurlfetch предоставляет общий/общий кэш и, как таковой, не позволяет отдельным приложениям очищать его. Для ваших собственных сервисов вы можете настроить заголовки кеша HTTP для уменьшения или аннулирования кеша при необходимости.

Кроме того, вы также можете добавить заголовки HTTP-запросов, указывающие максимальный возраст данных, которые могут быть возвращены. Пример питон приведены в списке рассылки резьбы:

result = urlfetch.fetch(url, headers = {'Cache-Control' : 'max-age=300'}) 

Per php.net file_get_contents http header example и HTTP header documentation модифицированный пример был бы:

<?php 
$opts = [ 
    'http' => [ 
    'method' => 'GET', 
    'header' => "Cache-Control: max-age=60\r\n", 
    ], 
]; 
$context = stream_context_create($opts); 
$file = file_get_contents('http://www.example.com/', false, $context); 
?> 
+0

ОК, спасибо. После некоторого времени кеш очистился сам по себе, но, я думаю, мне придется установить заголовки кеша с сервера. Это очень плохо. Есть ли другой способ достичь этого в gae php, кроме использования urlfetch? – CCH

+0

Обновленный ответ, включающий пример выборки с заголовком управления кешем, который является альтернативой этому на стороне сервера, но не для того, чтобы кто-либо другой, пользующийся вашим сервисом, также должен был это сделать или подвергнуть риску устаревших данных. – boombatower

+0

Это очень круто, я не видел, чтобы вы могли задать заголовок в запросе. – CCH

Смежные вопросы