2015-07-10 6 views
0

У меня есть сайт, который использует file_get_contents для доступа к API геолокации при каждом запросе. Время от времени этот удаленный API начинает давать ошибки 504/502, по-видимому, из-за проблем с их конца. Проблема в том, что это также приводит к тому, что мой сайт тоже падает вниз - есть ли способ создать резерв, чтобы, если удаленный сайт начнет отсчет времени, он будет игнорировать его и загрузить страницу в любом случае?file_get_contents заставляет сайт сходить вниз, когда удаленный сайт не работает

Это мой код:

$geoData = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $_SERVER['REMOTE_ADDR'])); 
+0

Возможный дубликат [Хорошая обработка ошибок с файлом \ _get \ _contents] (http://stackoverflow.com/questions/3431169/good-error-handling-with-file-get-contents) – Jerodev

+0

вы можете создать aa context , установите тайм-аут в контексте, а затем передайте контекст в file_get_contents - см. примечание о добавлении контекста по адресу http://php.net/manual/en/function.file-get-contents.php & http: // php. net/manual/en/context.http.php –

+0

Возможный дубликат [Обработка задержек при извлечении файлов с удаленного сервера в PHP] (http://stackoverflow.com/questions/1605063/handling-delays-when-retrieving-files- from-remote-server-in-php) EDIT: я вижу, что это не таймауты, а фактические ошибки с пульта, поэтому, возможно, это не обман (но в конце вопроса упоминаются тайм-ауты .... я противоречив) – Amadan

ответ

0

@$geoData = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=' . $_SERVER['REMOTE_ADDR']));

Это будет игнорировать любые ошибки линии броски, и по-прежнему.

Имейте в виду, вы должны проверить, если $ GEODATA существует:

if($geoData){ // code }

+0

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

+0

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

+0

спасибо, да, у меня есть, чтобы справиться с ошибками нормально - проблема в том, когда он истекает –

0

Я понимаю, что этот ответ может быть нежелательным, но здесь мы идем:

Это не хорошо идея вообще назвать API геолокации на каждый запрос. Это не что иное, как пустая трата ресурсов - я считаю, что вполне приемлемо рассматривать геоинформацию IP как постоянную в течение всего сеанса.

Мое предложение состоит в том, чтобы сохранить геоинформацию в сеансе и заполнить ее асинхронно - если у вас нет возможности для асинхронного PHP на сервере, используйте вызов AJAX с обработчиком ошибок на стороне клиента «Повторить и проигнорировать ».

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

Таким образом, всякий раз, когда сайт геоинформации уходит, ваше приложение остается, в то время как, конечно, без компонента геоинформации.

+0

Да, вы правы, это хорошая идея. когда у меня будет время, я разобрался, но в то же время я попробую шаги, рекомендованные в одном из вопросов, упомянутых выше. –

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