ホームページ  >  記事  >  バックエンド開発  >  PHP でリモート ファイルをダウンロードする 3 つの方法とパフォーマンスに関する考慮事項_PHP チュートリアル

PHP でリモート ファイルをダウンロードする 3 つの方法とパフォーマンスに関する考慮事項_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:37:201132ブラウズ

現在 Excel をエクスポートする場合、エクスポートされた Excel ファイルを頻繁にダウンロードして開く必要があり、非常に面倒です。

コードを書いて一度に実行したいのですが、サーバー側で Excel をエクスポート ==> Excel ファイルをローカルにダウンロード ==> 開きます。
リモート ファイルをダウンロードするための PHP ソリューションをリマインダーとして示します。 3 番目の方法では、ファイルが大きすぎる場合のパフォーマンスの問題が考慮されます。
3つのオプション:
-rw-rw-r-- 1 liuyuan liuyuan 470 2月20日 18:12 test1_fopen.php
-rw-rw-r-- 1 liuyuan liuyuan 541 2月20日 18:06 test2_curl.php
-rw-rw-r-- 1 liuyuan liuyuan 547 2月20日 18:12 test3_curl_better.php
オプション 1、小さなファイルに適しています
fopen()/file_get_contents()を直接使用してファイルストリームを取得し、file_put_contents()を使用して書き込みます
//baidu wenku 形式の xls ファイルの例
$url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977 &response- content-disposition=添付ファイル;%20filename=%22php%BA%AF%CA % FD.xls%22&response-content-type=application%2foctet-stream';
$fp_input = fopen($url, 'r');
file_put_contents('./test.xls', $fp_input);
exec("libreoffice ./test.xls", $out, $status);
?>
オプション 2: Curl を通じてコン​​テンツを取得する
//baidu wenku 形式の xls ファイルの例
$url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977 &response- content-disposition=添付ファイル;%20filename=%22php%BA%AF%CA % FD.xls%22&response-content-type=application%2foctet-stream';
$ch =curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
file_put_contents('./test.xls',curl_exec($ch));
curl_close($ch);
exec("libreoffice ./test.xls", $out, $status);
?>
1 番目と 2 番目の解決策には問題があります。つまり、ファイルがローカル ディスクに書き込まれる前にメモリに読み込まれるため、ファイルがメモリを超えてクラッシュする可能性があります。
メモリが十分な大きさに設定されている場合でも、これは不必要なオーバーヘッドです
解決策は、CURL に書き込み可能なファイル ストリームを直接与えて、この問題を CURL 自身で解決できるようにすることです (CURLOPT_FILE オプション経由)。そのため、最初にそのファイル ポインターを作成する必要があります。
//baidu wenku 形式の xls ファイルの例
$url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977 &response- content-disposition=添付ファイル;%20filename=%22php%BA%AF%CA % FD.xls%22&response-content-type=application%2foctet-stream';
$fp_output = fopen('./test.xls', 'w');
$ch =curl_init($url);
curl_setopt($ch, CURLOPT_FILE, $fp_output);
curl_exec($ch);
curl_close($ch);
exec("libreoffice ./test.xls", $out, $status);
?>

http://www.bkjia.com/PHPjc/735879.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/735879.html技術記事現在 Excel をエクスポートする場合、頻繁にダウンロードして開くエクスポートされた Excel ファイルをテストする必要があります。サーバー側で Excel を一度にエクスポートする == Excel ファイルをダウンロードするコードを記述するのは非常に面倒です。 .
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。