web-dev-qa-db-ja.com

PHP CURLダウンロードファイル

uRLからファイルをダウンロードしようとしていますが、ブラウザーを使用するとダウンロードダイアログが機能しますが、このコードを使用するとサーバー上の新しいファイルが空のままになります。

$ch = curl_init();
$source = "https://myapps.gia.edu/ReportCheckPortal/downloadReport.do?reportNo=$row['certNo']&weight=$row['carat']";
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec ($ch);
curl_close ($ch);
$destination = "./files/certs/$row['certNo'].pdf";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);

uRLの例: https://myapps.gia.edu/ReportCheckPortal/downloadReport.do?reportNo=1152872617&weight=1.35

14
user3376311

私はこれを使ってこの問題を解決しました:

curl_setopt($ch, CURLOPT_SSLVERSION,3);

これが最終的なコードです:

$source = "https://myapps.gia.edu/ReportCheckPortal/downloadReport.do?reportNo=1152872617&weight=1.35";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $source);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$data = curl_exec ($ch);
$error = curl_error($ch); 
curl_close ($ch);

$destination = "./files/test.pdf";
$file = fopen($destination, "w+");
fputs($file, $data);
fclose($file);
25
user3376311

Https接続を使用したURL。次のカールオプションも使用します。

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,false);
2
Sabuj Hassan
  1. 結果に実際にデータが含まれているかどうかを確認しましたか?
  2. より大きなファイルではfputsを使用してバイト長を指定する必要があります
  3. file_put_contents($destination, $data);を使用してみてください
1
Rok Nemet