Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:将文件从web下载到本地计算机_Php_File_Download - Fatal编程技术网

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

PHP:将文件从web下载到本地计算机,php,file,download,Php,File,Download,我在网上搜索了两天,没有找到答案 我正在尝试创建一个例程,该例程显示我控制的站点上的文件,并允许用户将所选文件下载到本地驱动器 我正在使用下面的代码。当我取消对echo语句的注释时,它会显示正确的源和目标目录、正确的文件大小以及fclose显示TRUE后的echo 当我回显源文件($data)时,它会显示正确的内容 $FileName变量包含正确的文件名,即.doc/.docx或.pdf。我已经测试了这两个,都没有将任何内容保存到目标目录或我机器上的任何其他位置 源路径($path)在登录后,但

我在网上搜索了两天,没有找到答案

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

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

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

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

源路径($path)在登录后,但我已登录

你有没有想过为什么写这个文件会失败

谢谢, 汉克

代码:

$path=”https://.../Reports/ReportDetails/$FileName”;
/*echo“下载:$path”*/
$data=file_get_contents($path);/*回显“$data”*/
$dest=“C:\MyScans\\”$FileName;/*回显“
$dest”*/ $fp=fopen($dest,'wb'); 如果($fp==FALSE)回显“
fopen中的错误”; $result=fwrite($fp,$data); 如果($result==FALSE)回显“
无法写入$dest”; /*else echo“
$result bytes write”*/ $result=fclose($fp);/*回显“
关闭:$result”*/
您可以使用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);
我想(!)你有点困惑

你提到的

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

但是路径
“C:\MyScans\\”$FileName
是Web服务器上的路径,而不是用户自己计算机上的路径

在您从远程网站检索所需文件后:

  • 使用
    头('Location:/path/to/file.txt')从它创建一个文件,并将用户重定向到该文件

  • 插入以下标题:

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

  • 它强制用户下载文件。这可能就是你想要做的


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

    您的服务器是否位于您的本地计算机上?谢谢,但这也没有做到,但下一条评论解决了问题-我将文件保存到我的服务器,而不是本地计算机。(我在那里找过文件,但没找到。)谢谢,这很有效。最初,我将头行与readfile()一起使用,但无法使其工作。然后我尝试了file\u get\u内容,这也使我无法工作。然后我尝试了上面的旋度解决方案,但似乎也失败了。我在服务器上查找文件,但没有找到。你的回答很完美,因为它突出了我的问题。然后,获得正确的文件名路径是一件简单的事情。谢谢你--但是现在我发现这些文件(通常是.pdf)在Web服务器上很好,在我的机器上被破坏了。它们在Web服务器上显示良好,但我在家用计算机上收到一条“文件已损坏且无法修复”消息。此外,文件大小已从44 KB增加到57 KB。可能是它正在向文件添加头信息吗?(一个.docx文件也发生了同样的事情。)@Hank我很高兴我帮助了你。你的最后一个问题应该是另一个问题。我认为问题在于编码。尝试添加
    utf8_encode()
    .Nadav,结果发现,添加到下载文件末尾的额外内容是文件传输后输出到网页的html代码(我向用户显示要下载的可用文件列表;他们单击一个,然后下载,并将其返回到列表)。我需要一个ob_start()和一个ob_end_flush()来避免这种情况发生。谢谢你的帮助--汉克
    <?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);