Предупреждение PHP: не удалось открыть поток: сбой HTTP-запроса
У меня два веб-сервера:
http://www.example.com.ar и eventos.example.com.ar
Я получаю такие ошибки, как:
[Ср, 16 сентября, 12:11:30.872792 2020] [php7:warn] [pid 17125] [client xx.yy.226.234:48896] Предупреждение PHP: file_get_contents ( https://eventos.example.com.ar/eventos/api/events?month=9&year = 1999): не удалось открыть поток: HTTP-запрос не прошел! HTTP/1.1 400 Bad Request\r\n в /var/www/www_example_com_ar/wp-content/plugins/example-plugin/mlc-plugin.php в строке 340
В строке 340-й есть:
$rest = file_get_contents('https://eventos.example.com.ar/eventos/api/events?month='.$month.'&year='.$year, true);
Я тестировал curl на том же хосте, на котором запущен http://www.example.com.ar, и не получаю такой ошибки:
curl -I "https://eventos.example.com.ar/eventos/api/events?month=9&year=1999"
HTTP/1.1 200 OK
Date: Wed, 16 Sep 2020 19:26:05 GMT
Server: Apache/2.4.39 () OpenSSL/1.0.2k-fips
X-DNS-Prefetch-Control: off
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=15552000; includeSubDomains
X-Download-Options: noopen
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Access-Control-Allow-Origin: *
Content-Type: application/json; charset=utf-8
Content-Length: 37027
ETag: W/"90a3-gzipB01lW17JrEb0GD0k0g2zFow"
Я установил:
- Apache: httpd-2.4.6-90.el7.centos.x86_64
- PHP: php73-php-7.3.15-1.el7.remi.x86_64
Кстати, у меня есть:
php73 -i | grep allow_url_fopen
allow_url_fopen => On => On
В CentOS 7.7
Итак, вопрос: что вызывает эту ошибку?
1 ответ
Можете добавить
ignore_errors => true
на ваш
file_get_contents
позвоните, чтобы получить полное сообщение. Это проигнорирует сообщение об ошибке, но вы сможете получить дополнительную информацию о том, что происходит. Дополнительная информация здесь (и не забудьте удалить его после, если вы хотите, чтобы он сломался, если возникнет другая ошибка.):
По моему опыту, эта ошибка, вероятно, связана с тем, что у вашего php нет корневого сертификата CA для проверки вызовов HTTPS. Добавление
cacert.pem
файл в свой экземпляр с конфигурацией в
php.ini
исправит эту проблему.
В любом случае, первым делом нужно попытаться получить больше информации о вашей ошибке, поскольку 400 может означать несколько вещей.