最终目标是让用户下载.csv文件。现在我只是试着下载一个简单的文本文件:test.txt。这个文件中唯一的东西是“测试”一词。
以下是files_to_download.php
的HTML代码Test file: <a href='test.php?file=test.txt'>Test.txt</a>
test.php的代码:
if(!(empty($_GET["file"])))
{
$file_name = $_GET["file"];
$path = "path/to/file";
$fullPath = $path . $file_name;
if(ini_get('zlib.output_compression'))
ini_set('zlib.output_compression', 'Off');
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: inline; attachment; filename=\"$file_name\"");
header("Content-Type: text/plain");
header("Content-Transfer-Encoding: binary");
readfile($fullPath);
}
我尝试过上面标题的变体,添加更多内容并删除其他标题。以上似乎是本网站推荐的最常见内容。
我也尝试过改变
header("Content-Type: text/plain");
到
header("Content-Type: text/csv");
并获得相同的结果:空.txt或.csv文件。
当我从服务器直接打开文件(文件浏览器)时,文件不为空。我已经检查了文件的权限,它们都是644,所以整个世界至少可以读取文件。目录是777。
我需要指定的Apache服务器上是否存在可能不存在的配置,或者我是否遗漏了上述内容。
感谢您的期待!
答案 0 :(得分:7)
在大多数情况下,路径错误
答案 1 :(得分:1)
读取文本文件,然后在标题()调用后echo
显示文本。
以下是我设置csv下载的方法:
//downloads an export of the user DB
$csv = User::exportUsers();
header('Content-disposition: attachment; filename=userdb.csv');
header('Content-type: text/csv');
echo $csv;
exportUsers()
创建csv数据的位置。您可以轻松地将$ csv替换为文本文件的内容,然后将其回显。
就文本文件而言,您可以使用file_get_contents()
将文件内容转换为字符串。然后回复那个字符串。
答案 2 :(得分:1)
就我而言,路径是正确的。下载强制在Windows上工作,但不是mac。
我在几次测试后发现标题 Content-Length 失败了。我在完整的URL上使用函数filesize,如:
$url_my_file = "http://my-website.com/folders/file.ext";
header('Content-Length: '.(filesize($url_my_file)));
我用
替换它$url_my_file = "http://my-website.com/folders/file.ext";
$headers = get_headers($url_my_file, 1);
header('Content-Length: '.($headers['Content-Length']));
而且......它现在正在运作:)
答案 3 :(得分:0)