Меню Закрыть

File get contents 404

Я столкнулся со странной проблемой, которую я не до конца понимаю. Мой веб-сервер через PHP вызывает PHP API. Остальные API направят запрос к соответствующей функции в файле photos.php на основе глагола. Все запросы GET, PUT и DELETE работают нормально, однако приведенный ниже запрос POST возвращает значение 404 Not found. Проблема в том, что он отлично работает из браузера или когда я звоню из Почтальона. Файл абсолютно существует и имеет соответствующий доступ. У меня нет этой проблемы с другими запросами POST либо.

После 5 часов борьбы с этим и прочтения 100 сайтов / статей я наткнулся на неясную ссылку на параметр stream_context_create в «ignore_errors» => true. В тот момент, когда я добавил эту строку, 404 исчез, и я смог достичь конечной точки API.

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

Вот ошибка, которую я получаю:

Информация о curl:

Решение

Если вы ищете ответ на вопрос, почему file_get_contents выдавал ошибку, а ignore_errors установлен в true, то, возможно, эти инструкции помогут вам приблизиться к ответу. Обратите внимание, что в этих инструкциях предполагается, что журналы ошибок php еще не просмотрены или пока не используются, и надеемся помочь в преодолении этих проблем.

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

phpinfo (); умереть();

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

Если это значение пустое, возможно, у вас отключены log_errors или ошибки печатаются в вашем журнале ошибок apache. Если это так, попробуйте найти журнал ошибок Apache.

Читайте также:  Достигнут лимит дискового пространства

С доступным вам журналом ошибок замените phpinfo (); умереть(); с этими двумя звонками. Выключите ignore_errors и снова запустите файл.

error_reporting (E_ALL); ini_set («display_errors», 1);

Используя журнал ошибок, можете ли вы найти уведомления / предупреждения / ошибки, связанные с вызовом file_get_contents, и опубликовать их здесь, если они не проясняют вопрос?

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

I’m using file_get_contents() to access a URL.

If the URL is not real, it return this error message. How can I get it to error gracefully so that I know that the page doesn’t exist and act accordingly without displaying this error message?

for example in zend you can say: if ($request->isSuccessful())

8 Answers 8

You need to check the HTTP response code:

With such commands in PHP, you can prefix them with an @ to suppress such warnings.

file_get_contents() returns FALSE if a failure occurs, so if you check the returned result against that then you can handle the failure

Each time you call file_get_contents with an http wrapper, a variable in local scope is created: $http_response_header

This variable contains all HTTP headers. This method is better over get_headers() function since only one request is executed.

Note: 2 different requests can end differently. For example, get_headers() will return 503 and file_get_contents() would return 200. And you would get proper output but would not use it due to 503 error in get_headers() call.

This aproach also alows you to have track of few request headers stored in different variables since if you use file_get_contents() $http_response_header is overwritten in local scope.

Читайте также:  Сравнение стиральных машин в таблице

Я получаю массивы JSON с file_get_contents , но если страница не существует, я хочу дать сообщение: Player не найден. Но теперь я получаю эту ошибку:

Предупреждение: file_get_contents (urlwithan404errorhere) [function.file-get-contents]: не удалось открыть поток: HTTP-запрос не удался! HTTP/1.1 404 Не найдено в ——-

Я не получаю эту ошибку, когда api дает мне правильный массив JSON.

Это код используется:

Ваш код может выглядеть следующим образом:

Пояснения:
* @ перед file_get_contents — прекратить показ ошибки php в случае неудачного запроса.
* если $summonerid равен 0 , то у вас нет игрока

Попробуйте что-то вроде этого:

@ Будет подавлять любое сообщение об ошибке, если file_get_contents() терпит неудачу. Она возвращает false в этом случае (использование === для сравнения, чтобы избежать путаницы с пустыми файлами), которые вы можете использовать для обнаружения неисправностей.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.