PHP的fopen()无法获取url,但curl可以

时间:2017-08-11 16:37:49

标签: php curl fopen

前段时间,我写了一个小实用程序函数,它接受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;
}

知道为什么会这样吗?

1 个答案:

答案 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;
}