2017-08-11 18 views
0

です。これまでは、inPathとoutPathを取り、fread()とfwrite()を使用して両方を開き、コピーを開きます。 allow_url_fopenが有効です。PHPのfopen()はURLを取得できませんが、curlは

私はコンテンツを取得しようとしていますが、fopen()はデータを取得していないというURLを持っていますが、同じようにcurlを使用すると動作します。問題の

URLは次のとおりです。http://www.deltagroup.com/Feeds/images.php?lid=116582497&id=1

fopenのバージョン:

$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

はそれが少しバギーですが、URLにはfopenを使用しないでください。 [curl functions](http://php.net/manual/en/book.curl.php)に組み込まれたPHPを使うことができます – aynber

+4

php.iniで 'allow_url_fopen'を有効にしていますか? http://php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen –

+0

allow_url_fopenが閉鎖されています。別のサイトから他のURLをダウンロードできます。 –

答えて

0

私はcurlopt_useragent文字列を追加するまで、phpのカールを使用してもファイルをダウンロードできませんでした。レスポンスの何もそれが必要であることを示していません(エラーなし、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; 
}