ограничение размера записанного файла - PullRequest
0 голосов
/ 27 января 2011

еще раз.Прежде всего, терпите меня, уже поздно ночью, и я устал, так что это, вероятно, простой ответ ...

Я собираю информацию о продуктах, один за другим, затем пишу каждыйпродукт в виде строки в файле 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);

Однако,Я просто получаю сообщение об ошибке «Не удалось записать в файл».Почему это?

Ответы [ 2 ]

2 голосов
/ 27 января 2011

Функция ftell () всегда сообщит вам текущее смещение байта в файле. Проверяйте значение этого значения перед каждой записью, и если оно превышает заданное вами значение, вы можете закрыть этот файл и открыть новый.

1 голос
/ 27 января 2011

fwrite не возвращает логическое значение, только при ошибке (false).

"fwrite () возвращает количество записанных байтов или FALSE при ошибке."

Проверить1005 *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 />';
}
...