PHP实现远程下载文件到本地


 


经常写采集器发布接口需要使用到远程附件的功能,所以自己写了一个PHP远程下载文件到本地的函数,一般情况下已经够用了,如果服务器支持CURL函数,程序则会优先选择CURL,有需要的小伙伴可以参考下。


 



 



代码很简单就不多废话了,直接奉上:





​?​



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




​<?php​


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


 


​function​​​ ​​httpcopy(​​​​$url​​​​, ​​​​$file​​​​=​​​​""​​​​, ​​​​$timeout​​​​=60) {​


​$file​​​ ​​= ​​​​empty​​​​(​​​​$file​​​​) ? ​​​​pathinfo​​​​(​​​​$url​​​​,PATHINFO_BASENAME) : ​​​​$file​​​​;​


​$dir​​​ ​​= ​​​​pathinfo​​​​(​​​​$file​​​​,PATHINFO_DIRNAME);​


​!​​​​is_dir​​​​(​​​​$dir​​​​) && @​​​​mkdir​​​​(​​​​$dir​​​​,0755,true);​


​$url​​​ ​​= ​​​​str_replace​​​​(​​​​" "​​​​,​​​​"%20"​​​​,​​​​$url​​​​);​


 


​if​​​​(function_exists(​​​​'curl_init'​​​​)) {​


​$ch​​​ ​​= curl_init();​


​curl_setopt(​​​​$ch​​​​, CURLOPT_URL, ​​​​$url​​​​);​


​curl_setopt(​​​​$ch​​​​, CURLOPT_TIMEOUT, ​​​​$timeout​​​​);​


​curl_setopt(​​​​$ch​​​​, CURLOPT_RETURNTRANSFER, TRUE);​


​$temp​​​ ​​= curl_exec(​​​​$ch​​​​);​


​if​​​​(@​​​​file_put_contents​​​​(​​​​$file​​​​, ​​​​$temp​​​​) && !curl_error(​​​​$ch​​​​)) {​


​return​​​ ​​$file​​​​;​


​} ​​​​else​​​ ​​{​


​return​​​ ​​false;​


​}​


​} ​​​​else​​​ ​​{​


​$opts​​​ ​​= ​​​​array​​​​(​


​"http"​​​​=>​​​​array​​​​(​


​"method"​​​​=>​​​​"GET"​​​​,​


​"header"​​​​=>​​​​""​​​​,​


​"timeout"​​​​=>​​​​$timeout​​​​)​


​);​


​$context​​​ ​​= stream_context_create(​​​​$opts​​​​);​


​if​​​​(@​​​​copy​​​​(​​​​$url​​​​, ​​​​$file​​​​, ​​​​$context​​​​)) {​


​//$http_response_header​


​return​​​ ​​$file​​​​;​


​} ​​​​else​​​ ​​{​


​return​​​ ​​false;​


​}​


​}​


​}​


​?>​



再来个远程下载文件到服务器





​?​



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




​<​​​​form​​​ ​​method​​​​=​​​​"post"​​​​>​


​<​​​​input​​​ ​​name​​​​=​​​​"url"​​​ ​​size​​​​=​​​​"50"​​​ ​​/>​


​<​​​​input​​​ ​​name​​​​=​​​​"submit"​​​ ​​type​​​​=​​​​"submit"​​​ ​​/>​


​</​​​​form​​​​>​


​< ?​​​​php​


​// maximum execution time in seconds​


​set_time_limit (24 * 60 * 60);​


​if (!isset($_POST['submit'])) die();​


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


​$​​​​destination_folder​​​ ​​= ​​​​'temp/'​​​​;​


 


​$url = $_POST['url'];​


​$newfname = $destination_folder . basename($url);​


​$​​​​file​​​ ​​= ​​​​fopen​​​ ​​($url, "rb");​


​if ($file) {​


​$​​​​newf​​​ ​​= ​​​​fopen​​​ ​​($newfname, "wb");​


​if ($newf)​


​while(!feof($file)) {​


​fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );​


​}​


​}​


​if ($file) {​


​fclose($file);​


​}​


​if ($newf) {​


​fclose($newf);​


​}​


​?>​



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