gpt4 book ai didi

php - 在 PHP 中读取非常大的文件

转载 作者:IT王子 更新时间:2023-10-29 01:24:11 24 4
gpt4 key购买 nike

当我尝试在 PHP 中读取一个非常中等大小的文件时,

fopen 失败。 一个 6 meg 的文件 让它窒息,尽管 100k 左右的小文件就可以了。我读到有时需要使用 -D_FILE_OFFSET_BITS=64 标志重新编译 PHP 才能读取超过 20 gig 的文件或一些荒谬的东西,但我不应该6兆文件没有问题吗?最终我们想要读取大约 100 兆的文件,如果能够打开它们然后使用 fgets 逐行读取它们会很好,因为我能够处理较小的文件。

PHP 中读取和操作超大文件的技巧/解决方案是什么?

更新:这是一个在我的 6 meg 文件上失败的简单代码块示例 - PHP 似乎没有抛出错误,它只是返回 false。也许我正在做一些非常愚蠢的事情?

$rawfile = "mediumfile.csv";

if($file = fopen($rawfile, "r")){
fclose($file);
} else {
echo "fail!";
}

另一个更新:感谢大家的帮助,结果确实是一件非常愚蠢的事情——权限问题。当大文件没有时,我的小文件莫名其妙地具有读取权限。呸!

最佳答案

您确定是 fopen 失败了,而不是脚本的超时设置吗?默认值通常约为 30 秒左右,如果您的文件读取时间超过该时间,则可能会导致错误。

另一件需要考虑的事情可能是脚本的内存限制 - 将文件读入数组可能会遇到这个问题,因此请检查错误日志以获取内存警告。

如果以上都不是你的问题,你可以考虑使用 fgets逐行读取文件,边走边处理。

$handle = fopen("/tmp/uploadfile.txt", "r") or die("Couldn't get handle");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
// Process buffer here..
}
fclose($handle);
}

编辑

PHP doesn't seem to throw an error, it just returns false.

相对于脚本运行位置,$rawfile 的路径是否正确?也许尝试在此处为文件名设置绝对路径。

关于php - 在 PHP 中读取非常大的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/162176/

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