ダウンロードの進行状況情報を含むファイルを Web サーバーからダウンロードしたいと考えています。その目的には、PHP cURLが最良の選択のようです。
ただし、ダウンロードしたファイルが、すべての Web ファイルが通常ダウンロードされるDownloadsフォルダーに配置されないという問題があります。次のファイル ダウンロード ルーチンを使用します。
$fp = fopen(dirname(__FILE__) . 'uploaded.pdf', 'w+');
$url = "file:///D:/WEB/SAIFA/WWW/PickUpTest.pdf";
$ch = curl_init(str_replace(" ","%20", $url));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_BUFFERSIZE, 1024*8);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, 'progressCallback' );
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
curl_setopt( $ch, CURLOPT_FILE, $fp );
curl_exec( $ch );
curl_close($ch);
fclose($fp);
unset($fp);
私の問題は、 Downloadsフォルダーの代わりに、この cURL スクリプトを含む PHP スクリプトが存在する WWW フォルダーにファイルが静かにダウンロードされることです。[ファイルのダウンロード] [名前を付けて保存] ダイアログ ボックスも表示されません。
[名前を付けて保存] ダイアログ ボックスを強制的に表示するために、スクリプトの先頭に次のヘッダーを追加しました。
header("Content-Disposition: attachment; filename=\"uploaded.pdf\"");
$fp = fopen(dirname(__FILE__) . 'uploaded.pdf', 'w+');
...
ヘッダーを使用した後、[名前を付けて保存] ダイアログ ボックスが表示されますが、ファイルは PHP スクリプトを含むフォルダーにサイレント モードでダウンロードされます。Downloads フォルダには、ファイルサイズ 0 の「uploaded.pdf」というファイルが保存されます。
私の質問は、ファイルを適切にダウンロードしてダウンロードフォルダーに配置し、[名前を付けて保存] ダイアログ ボックスを提供するように PHP cURL を作成する方法です。
私が使う:
- ワンプ
- ウィンドウズ7
- PHP バージョン 5.4.12
- カール バージョン 7.29.0