PHP provides three methods for downloading remote files and performance considerations ,. PHP provides three methods for downloading remote files and performance considerations. when exporting Excel files, we always need to test the exported Excel files and frequently download and open them, it is very troublesome to think about the three methods for downloading remote files in the PHP segment and the performance consideration,
When exporting an Excel file today, it is always necessary to test the exported Excel file and frequently download and open it, which is very troublesome.
You just want to write a code segment to export an Excel file to a local location at the server in one breath and then open the Excel file.
Here we will extract the PHP remote file download solution for forgetting. Among them, the 3rd methods take into account the performance issues when the file is too large.
Three solutions:
-Rw-r -- 1 liuyuan 470 Feb 20 18:12 test1_fopen.php
-Rw-r -- 1 liuyuan 541 Feb 20 18:06 test2_curl.php
-Rw-r -- 1 liuyuan 547 Feb 20 18:12 test3_curl_better.php
Solution 1: small files
Use fopen ()/file_get_contents () directly to get the file stream and write it with file_put_contents ()
123456789 |
//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 ); ?> |
Solution 2: get content through Curl
1234567891011 |
//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 ); ?> |
There is a problem in solution 1 and 2, that is, the file will be read into the memory before being written to the local disk. when the file is large, it may crash if it exceeds the memory.
Even if your memory settings are large enough, this is not an overhead.
Solution: directly give CURL a writable file stream to solve this problem by itself (using the CURLOPT_FILE option). In this way, you must first create a file pointer to it.
123456789101112 |
//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 ); ?> |
Today, when exporting an Excel file, you always need to test the exported Excel file, frequently download and open it, so it is very troublesome to write the section generation...