天天看點

PHP實作遠端下載下傳檔案到本地

PHP實作遠端下載下傳檔案到本地

經常寫采集器釋出接口需要使用到遠端附件的功能,是以自己寫了一個PHP遠端下載下傳檔案到本地的函數,一般情況下已經夠用了,如果伺服器支援CURL函數,程式則會優先選擇CURL,有需要的小夥伴可以參考下。

代碼很簡單就不多廢話了,直接奉上:

​​?​​

<col>

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

​<code>​&lt;?php​</code>​

​<code>​echo​</code>​​ ​<code>​httpcopy(​</code>​​<code>​"http://www.baidu.com/img/baidu_sylogo1.gif"​</code>​​<code>​);​</code>​

​<code>​function​</code>​​ ​<code>​httpcopy(​</code>​​<code>​$url​</code>​​<code>​, ​</code>​​<code>​$file​</code>​​<code>​=​</code>​​<code>​""​</code>​​<code>​, ​</code>​​<code>​$timeout​</code>​​<code>​=60) {​</code>​

​<code>​$file​</code>​​ ​<code>​= ​</code>​​<code>​empty​</code>​​<code>​(​</code>​​<code>​$file​</code>​​<code>​) ? ​</code>​​<code>​pathinfo​</code>​​<code>​(​</code>​​<code>​$url​</code>​​<code>​,PATHINFO_BASENAME) : ​</code>​​<code>​$file​</code>​​<code>​;​</code>​

​<code>​$dir​</code>​​ ​<code>​= ​</code>​​<code>​pathinfo​</code>​​<code>​(​</code>​​<code>​$file​</code>​​<code>​,PATHINFO_DIRNAME);​</code>​

​<code>​!​</code>​​<code>​is_dir​</code>​​<code>​(​</code>​​<code>​$dir​</code>​​<code>​) &amp;&amp; @​</code>​​<code>​mkdir​</code>​​<code>​(​</code>​​<code>​$dir​</code>​​<code>​,0755,true);​</code>​

​<code>​$url​</code>​​ ​<code>​= ​</code>​​<code>​str_replace​</code>​​<code>​(​</code>​​<code>​" "​</code>​​<code>​,​</code>​​<code>​"%20"​</code>​​<code>​,​</code>​​<code>​$url​</code>​​<code>​);​</code>​

​<code>​if​</code>​​<code>​(function_exists(​</code>​​<code>​'curl_init'​</code>​​<code>​)) {​</code>​

​<code>​$ch​</code>​​ ​<code>​= curl_init();​</code>​

​<code>​curl_setopt(​</code>​​<code>​$ch​</code>​​<code>​, CURLOPT_URL, ​</code>​​<code>​$url​</code>​​<code>​);​</code>​

​<code>​curl_setopt(​</code>​​<code>​$ch​</code>​​<code>​, CURLOPT_TIMEOUT, ​</code>​​<code>​$timeout​</code>​​<code>​);​</code>​

​<code>​curl_setopt(​</code>​​<code>​$ch​</code>​​<code>​, CURLOPT_RETURNTRANSFER, TRUE);​</code>​

​<code>​$temp​</code>​​ ​<code>​= curl_exec(​</code>​​<code>​$ch​</code>​​<code>​);​</code>​

​<code>​if​</code>​​<code>​(@​</code>​​<code>​file_put_contents​</code>​​<code>​(​</code>​​<code>​$file​</code>​​<code>​, ​</code>​​<code>​$temp​</code>​​<code>​) &amp;&amp; !curl_error(​</code>​​<code>​$ch​</code>​​<code>​)) {​</code>​

​<code>​return​</code>​​ ​<code>​$file​</code>​​<code>​;​</code>​

​<code>​} ​</code>​​<code>​else​</code>​​ ​<code>​{​</code>​

​<code>​return​</code>​​ ​<code>​false;​</code>​

​<code>​}​</code>​

​<code>​$opts​</code>​​ ​<code>​= ​</code>​​<code>​array​</code>​​<code>​(​</code>​

​<code>​"http"​</code>​​<code>​=&gt;​</code>​​<code>​array​</code>​​<code>​(​</code>​

​<code>​"method"​</code>​​<code>​=&gt;​</code>​​<code>​"GET"​</code>​​<code>​,​</code>​

​<code>​"header"​</code>​​<code>​=&gt;​</code>​​<code>​""​</code>​​<code>​,​</code>​

​<code>​"timeout"​</code>​​<code>​=&gt;​</code>​​<code>​$timeout​</code>​​<code>​)​</code>​

​<code>​);​</code>​

​<code>​$context​</code>​​ ​<code>​= stream_context_create(​</code>​​<code>​$opts​</code>​​<code>​);​</code>​

​<code>​if​</code>​​<code>​(@​</code>​​<code>​copy​</code>​​<code>​(​</code>​​<code>​$url​</code>​​<code>​, ​</code>​​<code>​$file​</code>​​<code>​, ​</code>​​<code>​$context​</code>​​<code>​)) {​</code>​

​<code>​//$http_response_header​</code>​

​<code>​?&gt;​</code>​

再來個遠端下載下傳檔案到伺服器

​<code>​&lt;​</code>​​<code>​form​</code>​​ ​<code>​method​</code>​​<code>​=​</code>​​<code>​"post"​</code>​​<code>​&gt;​</code>​

​<code>​&lt;​</code>​​<code>​input​</code>​​ ​<code>​name​</code>​​<code>​=​</code>​​<code>​"url"​</code>​​ ​<code>​size​</code>​​<code>​=​</code>​​<code>​"50"​</code>​​ ​<code>​/&gt;​</code>​

​<code>​&lt;​</code>​​<code>​input​</code>​​ ​<code>​name​</code>​​<code>​=​</code>​​<code>​"submit"​</code>​​ ​<code>​type​</code>​​<code>​=​</code>​​<code>​"submit"​</code>​​ ​<code>​/&gt;​</code>​

​<code>​&lt;/​</code>​​<code>​form​</code>​​<code>​&gt;​</code>​

​<code>​&lt; ?​</code>​​<code>​php​</code>​

​<code>​// maximum execution time in seconds​</code>​

​<code>​set_time_limit (24 * 60 * 60);​</code>​

​<code>​if (!isset($_POST['submit'])) die();​</code>​

​<code>​// folder to save downloaded files to. must end with slash​</code>​

​<code>​$​</code>​​<code>​destination_folder​</code>​​ ​<code>​= ​</code>​​<code>​'temp/'​</code>​​<code>​;​</code>​

​<code>​$url = $_POST['url'];​</code>​

​<code>​$newfname = $destination_folder . basename($url);​</code>​

​<code>​$​</code>​​<code>​file​</code>​​ ​<code>​= ​</code>​​<code>​fopen​</code>​​ ​<code>​($url, "rb");​</code>​

​<code>​if ($file) {​</code>​

​<code>​$​</code>​​<code>​newf​</code>​​ ​<code>​= ​</code>​​<code>​fopen​</code>​​ ​<code>​($newfname, "wb");​</code>​

​<code>​if ($newf)​</code>​

​<code>​while(!feof($file)) {​</code>​

​<code>​fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );​</code>​

​<code>​fclose($file);​</code>​

​<code>​if ($newf) {​</code>​

​<code>​fclose($newf);​</code>​

以上所述就是本文的全部内容了,希望大家能夠喜歡。