0

再次。首先,忍耐一下,深夜了,累了,所以这大概是一个简单的答案……

我正在逐一收集有关产品的信息,然后将每个产品作为一行写入 CSV 文件中。但是,我不想要一个巨大的 CSV 文件,所以我试图按大小拆分文件。随着每个新产品的收集,脚本应该检查它要写入的文件是否小于限制。如果是,那么它应该继续写入该文件。如果不是,则应创建一个新文件并将产品添加到新文件中。

这是我目前试图限制文件大小的内容:

$f = 1;
if(file_exists($shop_path.'items/items'.$f.'.txt'))
{
    if(filesize($shop_path.'items/items'.$f.'.txt') >= 512000)
    {
        $f++;
        $fh = fopen($shop_path.'items/items'.$f.'.txt', "a+");
    }
    else
    {
        $fh = fopen($shop_path.'items/items'.$f.'.txt', "a+");
    }
}
else
{
    $fh = fopen($shop_path.'items/items'.$f.'.txt', "a+");
}

if(fwrite($fh, $prod_str) === TRUE)
{
    echo 'Done!<br />';
}
else
{
    echo 'Could not write to file<br />';
}
fclose($fh);

但是,我只是不断收到“无法写入文件”错误。为什么是这样?

4

2 回答 2

2

ftell()函数将始终告诉您文件中当前的字节偏移量。在每次写入之前测试它的值,如果它超过了您的预定义值,那么您可以关闭该文件并打开一个新文件。

于 2011-01-27T08:58:37.643 回答
1

fwrite 不返回布尔值,仅在失败时返回 (false)。

“fwrite() 返回写入的字节数,错误时返回 FALSE。”

查看:http ://hu2.php.net/manual/en/function.fwrite.php

也许它有效:

if(fwrite($fh, $prod_str))
{
    echo 'Done!<br />';
}
else
{
    echo 'Could not write to file<br />';
}

编辑:甚至更好:

if(fwrite($fh, $prod_str) !== false)
{
    echo 'Done!<br />';
}
else
{
    echo 'Could not write to file<br />';
}
于 2011-01-27T08:37:13.480 回答