Мой локальный компьютер Mac не может использовать оболочки файловых потоков PHP в любой форме для HTTP-запросов (что необходимо для использования composer и т. Д.).
Если я запрашиваю тот же ресурс с драйвером curl,Все отлично.Вот две программы, которые я скопировал непосредственно из документации PHP:
Эта программа curl, она работает каждый раз без сбоев.
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "example.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1)
$output = curl_exec($ch);
curl_close($ch);
echo $output;
Эта программа использует fopen и всегда дает сбой после 60второе значение по умолчанию в php.ini
.Эта ошибка аналогична file_get_contents или любому другому подходу, основанному на файловом потоке.
<?php
$opts = [ 'http'=> [ 'method' => "GET" ]];
$context = stream_context_create($opts);
$fp = fopen('http://www.example.com', 'r', false, $context);
fpassthru($fp);
fclose($fp);
Это приводит к:
Warning: fopen(http://www.example.com):
failed to open stream:
Operation timed out in ...php on line ...
Я пробовал PHP 7.1 и PHP 7.3.
Вот пример моего INI-файла с уменьшенными настройками:
allow_url_fopen = On
allow_url_include = Off
auto_append_file =
auto_globals_jit = On
auto_prepend_file =
default_charset = "UTF-8"
default_mimetype = "text/html"
default_socket_timeout = 60
display_errors = On
display_startup_errors = On
enable_dl = Off
engine = On
error_reporting = E_ALL
extension_dir = "/usr/local/lib/php/pecl/20180731"
file_uploads = On
html_errors = On
implicit_flush = Off
output_buffering = 4096
И для потоков в php --info
$ php --info | grep -i stream
Registered PHP Streams => https, ftps, compress.zlib, compress.bzip2, php, file, glob, data, http, ftp, phar, zip
Registered Stream Socket Transports => tcp, udp, unix, udg, ssl, tls, tlsv1.0, tlsv1.1, tlsv1.2
Registered Stream Filters => zlib.*, bzip2.*, convert.iconv.*, string.rot13, string.toupper, string.tolower, string.strip_tags, convert.*, consumed, dechunk
Stream Wrapper support => compress.bzip2://
Stream Filter support => bzip2.decompress, bzip2.compress
libXML streams => enabled
mbstring extension makes use of "streamable kanji code filter and converter", which is distributed under the GNU Lesser General Public License version 2.1.
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Некоторые факты:
- Я установил это с
brew
. - Проблема присутствует со всеми URL
- Мы знаем, что это не брандмауэр (curl работает)
allow_url_fopen
is On
- Происходит только при открытии потока
- Эта проблема возникает у нескольких установок PHP.
- Даже при подключении с помощью fstreamopen
$fp = fsockopen("1.1.1.1", 80, $errno, $errstr, 30);
такая же задержка. - Если удалить доменное имя и напрямую использовать IP-адрес, такой как 1.1.1.1, проблема исчезнет.Однако, когда я запрашиваю
php -r "copy('http://54.36.53.46', 'composer-setup.php');"
, возвращается тот же сбой тайм-аута.