php file_get_contents() 在加载图像时卡住
php file_get_contents() get stuck in loading an image
如上所述,php file_get_contents() 函数甚至 fopen()/fread() 组合在尝试读取这个简单图像时卡住并超时 url :
http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png
但是同样的图片很容易被浏览器加载,有什么问题?
已编辑:
根据评论中的要求,我展示了我用来获取数据的功能:
function customRead($url)
{
$contents = '';
$handle = fopen($url, "rb");
$dex = 0;
while ( !feof($handle) )
{
if ( $dex++ > 100 )
break;
$contents .= fread($handle, 2048);
}
fclose($handle);
echo "\nbreaking due to too many calls...\n";
return $contents;
}
我也简单地试过这个:
echo file_get_contents('http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png');
两者给出相同的问题
已编辑:
根据评论中的建议,我使用了 curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 Safari/537.11');
$res = curl_exec($ch);
$rescode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch) ;
echo "\n\n\n[DATA:";
echo $res;
echo "]\n\n\n[CODE:";
print_r($rescode);
echo "]\n\n\n[ERROR:";
echo curl_error($ch);
echo "]\n\n\n";
这是结果:
[DATA:]
[CODE:0]
[ERROR:]
如果您没有使用 file_get_contents
获取远程数据,您可以尝试使用 cURL,因为它可以在 curl_error
上提供错误消息。如果你什么也没得到,甚至没有错误,那么你的服务器上的某些东西会阻止传出连接。也许您甚至想通过 SSH 尝试 curl
。我不确定这是否有任何不同,但值得一试。如果您没有得到任何信息,您可能需要考虑联系服务器管理员(如果您不是管理员)或提供商。
如上所述,php file_get_contents() 函数甚至 fopen()/fread() 组合在尝试读取这个简单图像时卡住并超时 url :
http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png
但是同样的图片很容易被浏览器加载,有什么问题?
已编辑:
根据评论中的要求,我展示了我用来获取数据的功能:
function customRead($url)
{
$contents = '';
$handle = fopen($url, "rb");
$dex = 0;
while ( !feof($handle) )
{
if ( $dex++ > 100 )
break;
$contents .= fread($handle, 2048);
}
fclose($handle);
echo "\nbreaking due to too many calls...\n";
return $contents;
}
我也简单地试过这个:
echo file_get_contents('http://pics.redblue.de/artikelid/GR/1140436/fee_786_587_png');
两者给出相同的问题
已编辑:
根据评论中的建议,我使用了 curl:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.1 Safari/537.11');
$res = curl_exec($ch);
$rescode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch) ;
echo "\n\n\n[DATA:";
echo $res;
echo "]\n\n\n[CODE:";
print_r($rescode);
echo "]\n\n\n[ERROR:";
echo curl_error($ch);
echo "]\n\n\n";
这是结果:
[DATA:]
[CODE:0]
[ERROR:]
如果您没有使用 file_get_contents
获取远程数据,您可以尝试使用 cURL,因为它可以在 curl_error
上提供错误消息。如果你什么也没得到,甚至没有错误,那么你的服务器上的某些东西会阻止传出连接。也许您甚至想通过 SSH 尝试 curl
。我不确定这是否有任何不同,但值得一试。如果您没有得到任何信息,您可能需要考虑联系服务器管理员(如果您不是管理员)或提供商。