gpt4 book ai didi

PHP fread 在 fopen、write 和 fclose 成功后不工作

转载 作者:可可西里 更新时间:2023-11-01 00:36:06 26 4
gpt4 key购买 nike

现在是清晨,我只是不明白:

下面的代码有效,文件被放置在服务器上:

$filename = $ioid . "_" . time();
$fp = fopen("$filename.csv", "w+");
foreach ($csv as $fields) {
fputcsv($fp, $fields);
}
fclose($fp);

但这不能立即工作(文件是 105k):

$fp2 = fopen("$filename.csv", "r");
$output = fread($fp2, 1000000000000);
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo $output;
fclose($fp2);

没有任何内容被读取,也没有任何内容被打印到页面上。

我做错了什么明显的事情? :)

最佳答案

你的问题是 fread($fp2, 1000000000000) 试图分配 1 TB 大缓冲区来读取文件并显然达到允许的内存限制,除非你'在发生 整数溢出 的 32 位平台上。无论哪种方式,它都不起作用。

如果你想将整个文件读取到输出缓冲区并快速执行此操作,请像这样使用 readfile():

header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$filename.csv");
readfile("$filename.csv")

下次一定要检查错误日志。

此外,如果您不打算将生成的文件存储在磁盘上,我建议您重新制作脚本以使用更安全的方法:

$fp = tmpfile(); // creates a handle for a temporary file with a unique name
foreach ($csv as $fields) {
fputcsv($fp, $fields);
}
rewind($fp);
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=report.csv");
fpassthru($fp);
fclose($fp); // this removes the file

关于PHP fread 在 fopen、write 和 fclose 成功后不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7267479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com