前段时间,我写了一个小实用程序函数,它接受inPath和outPath,打开它们并使用fread()和fwrite()从一个复制到另一个。 allow_url_fopen已启用。
好吧,我有一个网址,我正在尝试获取内容,而fopen()没有获取任何数据,但是如果我使用curl做同样的事情,它就可以了。
相关网址为:http://www.deltagroup.com/Feeds/images.php?lid=116582497&id=1
fopen version:
$in = @fopen( $inPath, "rb" );
$out = @fopen( $outPath, "wb" );
if( !$in || !$out )
{
echo 0;
}
while( $chunk = fread( $in, 8192 ) )
{
fwrite( $out, $chunk, 8192 );
}
fclose( $in );
fclose( $out );
if( file_exists($outPath) )
{
echo 1;
}
else
{
echo 0;
}
卷曲版本:
$opt = "curl -o " . $outPath . " " . $inPath;
$res = `$opt`;
if( file_exists($outPath) )
{
echo 1;
}
else
{
echo 0;
}
知道为什么会这样吗?
答案 0 :(得分:0)
即使使用php的curl,我也无法下载文件 - 直到我添加了curlopt_useragent字符串。响应中没有任何内容表明它是必需的(没有错误,只有HTTP 200)。
最终代码:
$out = @fopen( $outPath, "wb" );
if( !$out )
{
echo 0;
}
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $inPath );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_FILE, $out );
curl_setopt( $ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13');
curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 15 );
curl_setopt( $ch, CURLOPT_TIMEOUT, 18000 );
$data = curl_exec( $ch );
curl_close( $ch );
fclose( $out );
if( file_exists($outPath) )
{
echo 1;
}
else
{
echo 0;
}