Php 生成和下载CSV流不支持查找(非远程)
我正试图让我的代码以.csv格式下载文件,我确实做到了这一点,它工作得很好,除了它包含一个包含(#Resource ID XX)的附加字段外,我不想这样做。我浏览了一下,读了很多答案,说应该使用下面的代码:Php 生成和下载CSV流不支持查找(非远程),php,Php,我正试图让我的代码以.csv格式下载文件,我确实做到了这一点,它工作得很好,除了它包含一个包含(#Resource ID XX)的附加字段外,我不想这样做。我浏览了一下,读了很多答案,说应该使用下面的代码: $fp = fopen('php://output', 'w'); foreach ($list as $fields) { fputcsv($fp, $fields); } rewind($fp); $output = stream_get_contents($fp);
$fp = fopen('php://output', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields);
}
rewind($fp);
$output = stream_get_contents($fp);
fclose($fp);
这给了我以下错误:
rewind():流不支持在第30行的/var/www/opencart/admin/model/catalog/upload.php中查找,据我所知,这通常是因为fopen用于外部的东西,我不相信我的。所以我不确定问题出在哪里?根据我的经验,rewind()
不适用于php://output
,但它与php://memory
如果您的计划是抓取反输出,以便稍后进行强制下载,那么您不需要倒带流;用stream\u get\u contents()
阅读就足够了
最后的代码应该是
$fp = fopen('php://output', 'w');
foreach ($list as $fields)
{
fputcsv($fp, $fields);
}
$output = stream_get_contents($fp);
fclose($fp);
那么为什么要执行倒带()
和$output=stream\u get\u contents($fp)代码>?除非你打算用$OUUT做点什么,否则它们是多余的,php://output
正在将数据发送到输出流(如果是web请求,则有效地发送到客户端浏览器),因此应将其视为外部。。。。一旦您开始向浏览器发送数据,如何将其回调并更改?我使用带有标题的输出稍后下载文件。我还以为php://output 也可能是外部的,但另一篇帖子建议将其作为我正在考虑的问题的解决方案php://output
等同于echo:除非您也使用输出缓冲,否则它将发送到浏览器(用于web请求)。如果需要添加标题,请在将数据发送到php://output
,或者使用临时文件,或者输出缓冲区,我认为它会缓存它,我不认为这是一个web请求