PHP:将文件从Web下载到本地计算机

时间:2012-07-06 22:18:04

标签: php file download

我在网上搜索了2天但找不到答案。

我正在尝试创建一个例程,在我控制的网站上显示文件,并允许用户将所选文件下载到本地驱动器。

我正在使用以下代码。当我取消注释echo语句时,它会显示正确的源和目标目录,正确的文件大小以及fclose显示为TRUE后的回显。

当我回显源文件($ data)时,它会显示正确的内容。

$ FileName变量包含正确的文件名,即.doc / .docx或.pdf。我已经测试了两者,并且都没有将任何内容保存到目标目录或我机器上的任何其他位置。

源路径($ path)位于登录后面,但我已登录。

有关为何无法写入文件的任何想法?

谢谢, 汉克

代码:

$path = "https://.../Reports/ReportDetails/$FileName";
/* echo "Downloading: $path"; */
$data = file_get_contents($path); /* echo "$data"; */
$dest = "C:\MyScans\\".$FileName; /* echo "<br />$dest"; */
$fp = fopen($dest,'wb');
if ( $fp === FALSE ) echo "<br />Error in fopen";
$result = fwrite($fp,$data);
if ( $result === FALSE ) echo "<br />Can not write to $dest";
/* else echo "<br />$result bytes written"; */
$result = fclose($fp); /* echo "<br />Close: $result"; */

2 个答案:

答案 0 :(得分:2)

我认为(!)你有点困惑。

您提到了

  

允许用户将选定的文件下载到本地驱动器。

但路径"C:\MyScans\\".$FileName 是网络服务器上的路径,而不是用户自己计算机上的路径。

在您执行任何操作以从远程网站检索所需文件之后:

  1. 从中创建文件,并使用header('Location: /path/to/file.txt');
  2. 将用户重定向到该文件
  3. 插入以下标题:

    header('Content-disposition: attachment; filename=path/to/file.txt');

  4. 强制用户下载文件。这可能就是你想做的事情

    注意:我使用了扩展程序txt,但您可以使用任何扩展程序

答案 1 :(得分:1)

你可以使用php Curl:

<?php
    $url  = 'http://www.example.com/a-large-file.zip';
    $path = '/path/to/a-large-file.zip';

    $fp = fopen($path, 'w');

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);

    $data = curl_exec($ch);

    curl_close($ch);
    fclose($fp);