ограничение размера записываемого файла

опять таки. Во-первых, потерпите меня, уже поздняя ночь, и я устал, так что это, наверное, простой ответ...

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

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


person chaoskreator    schedule 27.01.2011    source источник


Ответы (2)


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 />';
}
person Peter Porfy    schedule 27.01.2011
comment
Ха-ха! Я знал, что это какая-то глупость. Я должен был помнить об этом, но я не так часто использую функцию fwrite(). Спасибо! - person chaoskreator; 27.01.2011

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

person Mark Baker    schedule 27.01.2011
comment
Я даже не слышал о такой функции, но обязательно посмотрю. Спасибо! - person chaoskreator; 27.01.2011