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

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

WBOY
WBOYオリジナル
2016-07-12 09:02:23788ブラウズ

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

今日 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()を使用して書き込みます

1 2 3 4 5 6 7 8 9 <?php //an example xls file form baidu wenku $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%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 を通じてコン​​テンツを取得する

1 2 3 4 5 6 7 8 9 10 11 <?php //an example xls file form baidu wenku $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%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 オプション経由)。そのため、最初にそのファイル ポインターを作成する必要があります。

1 2 3 4 5 6 7 8 9 10 11 12
<?php //an example xls file form baidu wenku $url = 'http://bs.baidu.com/wenku4/%2Fe43e6732eba84a316af36c5c67a7c6d6?sign=MBOT:y1jXjmMD4FchJHFHIGN4z:lfZAx1Nrf44aCyD6tJqJ2FhosLY%3D&time=1392893977&response-content-disposition=attachment;%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/1085571.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1085571.html技術記事 PHP でリモート ファイルをダウンロードする 3 つの方法とパフォーマンスの考慮事項. 今日 Excel をエクスポートするとき、頻繁にダウンロードして開く必要があり、非常に面倒で、段落を書きたいだけです...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。