📑

PHPのcurlでCURLOPT_FILEを使う際の注意点

2023/04/10に公開

先日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が参考になりました

https://stackoverflow.com/questions/8583847/curl-exec-succeeds-but-the-output-file-is-empty/8583955

どうやら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