Я столкнулся со странной проблемой, которую я не до конца понимаю. Мой веб-сервер через 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 в этом случае (использование === для сравнения, чтобы избежать путаницы с пустыми файлами), которые вы можете использовать для обнаружения неисправностей.