我在网上搜索了两天,都找不到答案。
我正在尝试创建一个例程,在我控制的站点上显示文件,并允许用户将选定的文件下载到本地驱动器。
我正在使用下面的代码。当我取消注释echo语句时,它会显示正确的源目录和目标目录、正确的文件大小以及fclose显示TRUE后的echo。
当我回显源文件($data)时,它会显示正确的内容。
$FileName变量包含正确的文件名,它是.doc/.docx或.pdf。我已经测试了这两个文件名,并且都没有将任何内容保存到目标目录或机器上的任何其他位置。
源路径($path)在登录之后,但我已经登录了
有什么想法吗?为什么这没能写文件?
谢谢,Hank
代码:
$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"; */
我认为(!)您有点困惑。
您提到
允许用户将所选文件下载到本地驱动器。
但是路径"C:'MyScans''".$FileName
是是Web服务器上的路径,而不是用户自己计算机上的路径。
在你做任何事情从远程网站检索所需的文件后:
-
从中创建一个文件,并使用
header('Location: /path/to/file.txt');
将用户重定向到该文件 -
插入以下标题:
header('Content-disposition: attachment; filename=path/to/file.txt');
它强制用户下载该文件。这可能就是您想要做的
注意:我使用了扩展txt
,但您可以使用任何扩展
您可以使用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);