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><?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>) && @</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>) && !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>=></code><code>array</code><code>(</code>
<code>"method"</code><code>=></code><code>"GET"</code><code>,</code>
<code>"header"</code><code>=></code><code>""</code><code>,</code>
<code>"timeout"</code><code>=></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>?></code>
再來個遠端下載下傳檔案到伺服器
<code><</code><code>form</code> <code>method</code><code>=</code><code>"post"</code><code>></code>
<code><</code><code>input</code> <code>name</code><code>=</code><code>"url"</code> <code>size</code><code>=</code><code>"50"</code> <code>/></code>
<code><</code><code>input</code> <code>name</code><code>=</code><code>"submit"</code> <code>type</code><code>=</code><code>"submit"</code> <code>/></code>
<code></</code><code>form</code><code>></code>
<code>< ?</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>
以上所述就是本文的全部内容了,希望大家能夠喜歡。