-1
$ch = curl_init();
$fp = fopen("$localName",'w');

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_URL, $src);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 200);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, "http://google.com");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
$rawdata=curl_exec ($ch);
curl_close ($ch);

fwrite($fp, $rawdata); 
fclose($fp);

... ファイルを書き込みますが、無効です (0 バイト)。私が間違っていることを教えてください。

4

4 に答える 4

1

問題は、いくつかの画像がロードされたが、カールを混乱させる 302 リダイレクト ステータス メッセージが表示されたことであることが判明しました。

于 2012-11-28T07:46:39.507 に答える
1

コードを実行したところ、いくつかのエラーがありました。ここでそれらを修正しました:

$src = '<URL to the image>';
$ch = curl_init($src);

//curl_setopt($ch, CURLOPT_FILE, $fp); This option is not required
//curl_setopt($ch, CURLOPT_URL, $host); Since you are setting the source in init skip this
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($ch, CURLOPT_TIMEOUT, 200);
curl_setopt($ch, CURLOPT_AUTOREFERER, false);
curl_setopt($ch, CURLOPT_REFERER, "http://google.com");
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Follows redirect responses.

$raw=curl_exec($ch);
if ($raw === false) {
    trigger_error(curl_error($ch));
}

curl_close ($ch);
$localName = basename($src); // The file name of the source can be used locally       
if(file_exists($localName)){    
    unlink($localName);
}

$fp = fopen($localName,'wb');
fwrite($fp, $raw);
fclose($fp);
于 2012-11-19T09:38:10.127 に答える
0

画像タイプの header() を追加してみてください。

たとえば、PNG 画像の場合は、次のコードを追加します。

// ...
header('Content-type: image/png');
file_put_contents($raw);
于 2012-11-19T09:25:07.460 に答える
0

遊びがあれば、必要なのは次のとおりです。

<?
$src = 'http://bit.ly/TT5N5M';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $src);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$output = curl_exec($ch);
curl_close($ch);

$fp = fopen("img.jpg",'w');
fwrite($fp, $output);
fclose($fp);
于 2012-11-19T09:29:27.107 に答える