Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Утечка памяти в PHP. Да или нет?


Автор: satrap 29.2.2008, 11:16
Вот такой простой код:
Код
<?php

set_time_limit(120); // на всякий случай

function test_change($filename) {
    $handle = fopen($filename, "r+");
    clearstatcache();
    $filesize = filesize($filename);
    if ($filesize)
        $data = fread($handle, $filesize);
    else $data = 0;
    ftruncate($handle, 0);
    fwrite($handle, $data);
    fclose($handle);
}

$filename = 'file.txt';
$i = 0;

file_put_contents($filename, $i);
while ($i++ < 10000 ) {
    test_change($filename);
}

echo "Done\n";

?>

вызывает у меня ошибку 
Код
Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 134217729 bytes) in blablabla.php on line 10


При этом самое интересное то, что если убрать из кода вызов clearstatcache(), или использовать константу вместо $filesize в fread() или константу вместо $data в fwrite() - ошибка исчезает. Может я что-то делаю неправильно?

П.С. Windows XP SP2, PHP 5.2.4

Автор: solenko 29.2.2008, 11:44
А размер файла какой? Неужто не больше 134217728 bytes -- лимита, который выставлен в php.ini

Предугадывая следуюший вопрос -- ini_set )

Автор: satrap 29.2.2008, 12:10
Точно! Я просто ступил: ftruncate($handle, 0) не переводит файловый указатель на начало файла и в документации об этом ни слова. Нужно использовать fseek. Так что топик можно переименовывать в "Утечка мозгов 2.0".

Спасибо solenko. ini_set тут не причем.

Автор: solenko 29.2.2008, 12:13
satrap, причем. Просто телепатия не сработала ) с пом. ini_set можно изменить лимит памяти.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)