从外部链接远程下载文件到我的服务器 - 下载过早停止

时间:2012-03-16 00:39:08

标签: php curl file-get-contents

我有一个页面集,我在其中输入文件的URL,我让我的服务器下载该文件并将其保存到我服务器上的文件夹中。问题是我不知道如何将文件下载到我的服务器。我尝试了以下两种方法,它们都不起作用。

这个引发了关于失败的开放流的错误:

$url = 'http://www.example.com/file.zip';
$enc = urlencode($url);
$dir = "/downloads/file.zip";
$raw = file_get_contents($enc);
file_put_contents($dir, $raw);

这个可以工作,但我只从一个270kb文件中获得18kb :(我试图增加超时)

set_time_limit(0);

$url = 'http://www.eample.com/file.zip';
$fp = fopen ('/downloads/file.zip', 'w+');

    $ch = curl_init($url);

    curl_setopt_array($ch, array(
    CURLOPT_URL            => $url,
    CURLOPT_BINARYTRANSFER => 1,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_FILE           => $fp,
    CURLOPT_TIMEOUT        => 50,
    CURLOPT_USERAGENT      => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)'
    ));

$results = curl_exec($ch);
if(curl_exec($ch) === false)
 {
  echo 'Curl error: ' . curl_error($ch);
 }

1 个答案:

答案 0 :(得分:2)

  

这个引发了关于失败的开放流的错误:

...
$enc = urlencode($url);
...

我不难说,因为你不需要“urlencode”那个已经正确编码的网址。尝试:

$url = 'http://www.example.com/file.zip';
$file = "/downloads/file.zip";
$src = fopen($url, 'r');
$dest = fopen($file, 'w');
echo stream_copy_to_stream($src, $dest) . " bytes copied.\n";

stream_copy_to_stream­Docs。如果您需要设置更多HTTP内容,例如用户代理等,请使用HTTP Context Options­Docs