📑
PHPのcurlでCURLOPT_FILEを使う際の注意点
先日PHPでGoogle Photosから動画をダウンロードするコードを書いている際に0kbのファイルが出力されるという事象が発生しました
//動かない
$fh = fopen("PATH", "w");
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, "URL");
curl_setopt($curl,CURLOPT_FILE, $fh);
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE);
curl_exec($curl);
curl_close($curl);
fclose($fh);
なかなか検索に引っかからず苦労したのですが、下記のstackoverflowが参考になりました
どうやらFILEのあとにRETURNTRANSFERを設定するとリダイレクトされた際に301ヘッダーのデータが出力されてしまうのか、意図したデータがダウンロードされないようです
//動く
$fh = fopen("PATH", "w");
$curl = curl_init();
curl_setopt($curl,CURLOPT_URL, "URL");
curl_setopt($curl,CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl,CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($curl,CURLOPT_FILE, $fh);
curl_exec($curl);
curl_close($curl);
fclose($fh);
CURLOPT_FILEを使用する際はRETURNTRANSFERのあとに配置するようにしましょう
Discussion