Узнаю размер папки в байтах, выводит правильно 7336517, а дальше начинаются весёлости: Если начинаю делить, сравнивать (пытался просто сравнить $size с 1048576 - выдаёт, что сайз меньше чем 1048576) в числе появляется запятая (точка) и размер папки без округления становится 182.430624303 Кб. Думал может с типом данных что-то не так, но PHP не поддерживает явного объявления типов данных, просто return 7336517/1024; выводит всё правильно. В чем загвоздка? откуда эти 182 Кб вместо 7 Мб? PHP: function dirsize($d) { $dh = opendir( $d ); $size = 0; while( ( $f = readdir( $dh ) ) !== false ) { if ( $f != "." && $f != ".." ) { $path = $d . "/" . $f; if( is_dir( $path ) ) { $size += dirsize( $path ); } elseif( is_file( $path ) ) { $size += filesize( $path ); } } } //return $size; <- если раскомментить - выведет правильно в байтах $kb=$size/1024; $mb=$kb/1024; $gb=$mb/1024; closedir($dh); if ($size>1024) { if ($kb<1024) { return $kb.' Кб'; } else { if ($mb<1024) { return $mb.' Мб'; } else { return $gb.' Гб'; } } } else { return $size.' байт'; } }
Я ващпе понять не могу все эти странности - до тех пор пока "сайз" с чем-нибудь не сравнил - он нормальный, как только сравнил - сразу запятая берётся откуда-то и число "левое" какое-то. Может есть у кого функция "определения размера папки" что бы заодно байты в Кб, Мб и Гб переводила? в своём примере уже не знаю куда копать - яндекс много мне посоветовал и везде одно и то же - размер папки все функции, которые я нашёл, определяют правильно, а переводят в Кб, Мб и Гб все так же как у меня - неправильно. Проблема началась только тогда, когда размер папки стал больше 512 Мб, до этого у меня как-то всё работало.
действительно забавно 5304636 байт делим в калк.ехе на 1024 получаем 5180,30859375 в пхп те же самые действия=55.0330008907 и дело даже не в точке...цифры не похожи
если выкинуть все опендиры и просто написать: PHP: $size = 7336517; ... Нормально делить будет или нет?
всё , встречайте дибила я думал оно и вложенные папки сканирует )) размер файлов в папке считает правильно
PHP: <?php /** * Get the directory size * @param directory $directory * @return integer */ function dirSize($directory) { $size = 0; foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory)) as $file){ $size+=$file->getSize(); } return $size; } ?>
Именно! самое что интересное просто при таком раскладе выдаёт правильно: 6.99664783478 Мб, если с сайзом ничего не делать - просто вывести - тоже правильно в байтах покажет, а вот когда начинаю сравнивать, делить - попа получается. Всё там нормально, минимум 3 функции перепробовал, не считая своей, что бы исключить свои ошибки, в яндексе "размер папки PHP" и пробую - результат у всех один. Вот оно! Счастье в жизни! До сих пор не понимаю в чём был подвох, но это тпример на пару с моей функцией перевода байты в "Кб, Мб и Гб" работает нормально, Спасибо!
Твоя функция рекурсивно вызывает саму себя, следовательно если хочешь возвр результат в другом виде пиши новую ф-ю, которая вызывает эту и обрабатывает ответ, можно класс, короч проблема в рекурсии смотри внимательно