CSV文件下载异常:生成后下载为空但本地文件含数据
解决CSV文件下载为空的问题
我一眼就发现你代码里的几个关键问题,导致浏览器收到的是空文件,咱们一步步来修复:
核心问题分析
- 文件名输出语法错误:你在
Content-Disposition里写的<?php echo $sFile />;完全写错了,应该是<?php echo $sFile; ?>,不过更推荐直接用PHP拼接header,避免混写出错。 - 缺少文件内容输出:你只发送了下载的响应头,但没有把本地存储的CSV文件内容读取并输出到浏览器,这就是为什么下载的文件是空的——浏览器只拿到了“要下载文件”的指令,却没拿到文件本身的内容。
- 路径可能不正确:
$sFile = "myfile.csv";是相对file.php的路径,如果你的CSV文件存在插件目录,而file.php不在同一个目录下,就会找不到文件,自然输出为空。
修正后的file.php代码
<?php // 先清空输出缓冲区,避免前置内容干扰header ob_clean(); flush(); // 替换成CSV文件的正确路径,比如插件目录的绝对路径 // 假设插件目录路径是 WP_PLUGIN_DIR . '/your-plugin-folder/',根据实际情况调整 $sFile = WP_PLUGIN_DIR . '/your-plugin-folder/myfile.csv'; // 检查文件是否存在,避免报错 if (!file_exists($sFile)) { die("文件不存在"); } // 设置正确的响应头 header('Content-Type: text/csv'); header('Content-Disposition: attachment; filename="' . basename($sFile) . '"'); header('Content-Length: ' . filesize($sFile)); // 可选,告诉浏览器文件大小 // 读取并输出文件内容 readfile($sFile); // 终止脚本,防止后续输出干扰 exit; ?>
额外注意事项
- 前置输出问题:确保
file.php的开头没有任何空格、换行或者HTML代码,哪怕是<?php之前的空白也会导致header失效,下载异常。 - 权限问题:确认服务器对插件目录下的CSV文件有读取权限,否则
readfile无法读取内容。 - 路径验证:可以先用
var_dump($sFile);输出路径,确认指向的是正确的文件位置。
内容的提问来源于stack exchange,提问作者Kath W.
相关产品推荐
相关产品推荐

