1

ダウンロードの進行状況情報を含むファイルを 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
4

1 に答える 1

2

関数を使用することで、実際にはサーバーにファイルを保存するように要求しているので、呼び出しfileの結果が最終的に PHP フォルダーに保存されることは理にかなっています。cURL

私が問題を理解していれば、あなたが本当に望んでいるのは、cURL の結果をブラウザーに送り返すことです。- を送信することで、途中まで到達しました。header(...)これにより、ファイルが来てダウンロードする必要があることをユーザーのブラウザーに知らせることができます。見逃したステップは、cURL データをヘッダーと共に送信することです。

ファイルを保存した後にファイルの内容をエコーするか、より効率的に (ファイルの余分なコピーが必要ないと仮定して)、コードを削除してファイルをローカルに保存し、cURL オプションを削除しますCURLOPT_RETURNTRANSFER。これにより、cURL に出力を直接送信するように指示されるため、ダウンロード用のデータになります。

それが役立つことを願っています!

EDITC:\test.pdfローカル ファイルを取得して ( )、それをユーザーのブラウザに送信する簡単な例( as uploaded.pdf)。

<?php

header("Content-Disposition: attachment; filename=\"uploaded.pdf\"");
// Get a FILE url to my test document
$url = 'file://c:/test.pdf';    
$url= str_replace(" ","%20", $url);
$ch= curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_exec( $ch );

curl_close ($ch); 

それがもう少し役立つことを願っています!

于 2013-10-27T08:59:29.887 に答える