Давайте проверим несколько меньших битов, чтобы увидеть, если мы можем выделить это:
Обеспечить allow_url_fopen
is enabled.
Обеспечить разрешение DNS-запросов.
Проверьте соединения IPv4 работать правильно. *
Проверьте соединения IPv6 работать должным образом. *
Попытаться всю вещь с file_get_contents()
, который использует те же FOPEN оберток.
* Обратите внимание, что очень важно, чтобы проверить как из них. У меня был опыт в прошлом, когда различные инструменты уровня системы, используемые PHP, используют разные версии IP. Это довольно запутанно с curl_*
работает отлично, но file_get_contents()
нет.
Вот скрипт, который проверяет каждый из них:
<?php
//Not relevant - Formatting for web browsers...
if (php_sapi_name() !== "cli") {
echo "<pre>";
}
//Ensure PHP is configured correctly.
$allowUrlFopen = ini_get('allow_url_fopen');
if($allowUrlFopen){
echo "Success: allow_url_fopen is enabled.\n";
} else {
echo "FAILURE: allow_url_fopen is disabled.\n";
}
//Check that DNS is working.
$dns = dns_get_record("www.google.com");
if($dns){
echo "Success: DNS has resolved.\n";
} else {
echo "FAILURE: DNS did not resolve.\n";
}
//A Google webserver (IPv4). the IP provided was listed in $dns.;
$ipv4 = curl_init("http://216.58.217.36");
curl_setopt($ipv4, CURLOPT_RETURNTRANSFER, true);
curl_exec($ipv4);
$statusCode = curl_getinfo($ipv4, CURLINFO_HTTP_CODE);
//The server responded at all, what it responded with isn't important.
if($statusCode >= 100){
echo "Success: Accessing Google's IPv4 web server succeeded.\n";
} else {
echo "FAILURE: Accessing Google's IPv4 web server failed.\n";
}
//A Google webserver (IPv6). The IP provided was listed in $dns.;
$ipv6 = curl_init("http://2607:f8b0:400f:803::2004");
curl_setopt($ipv6, CURLOPT_RETURNTRANSFER, true);
curl_exec($ipv6);
$statusCode = curl_getinfo($ipv6, CURLINFO_HTTP_CODE);
if($statusCode >= 100){
echo "Success: Accessing Google's IPv6 web server succeeded.\n";
} else {
echo "FAILURE: Accessing Google's IPv6 web server failed.\n";
}
//Fetch remote data via fopen url wrappers (file_get_contents utilizies them).
$file = file_get_contents("http://www.google.com");
$characters = strlen($file);
if($characters){
echo "Success: using fopen wrappers to fetch remote data via a URL succeeded.\n";
} else {
echo "FAILURE: using fopen wrappers to fetch remote data via a URL failure.\n";
}
if (php_sapi_name() !== "cli") {
echo "</pre>";
}
Обязательно исследовать любые сбои с системными инструментами более низкого уровня. Я застрял в проблеме, подобной этому, где все IPv6 на моей операционной системе был тайм-аут. Отключение системы IPv6 в целом было исправлено.
Публикация некоторого кода. – Sammitch
См. [Мануала] (http://php.net/manual/en/function.readfile.php) l: «URL-адрес может использоваться как имя файла с этой функцией, если обертки fopen были включены». Больше информации о дублированном я связан. – HPierce