У меня есть зашифрованное изображение, и перед его сохранением я хотел бы знать, сколько места он занимает. Я могу получить количество символов через strlen($img)
или через mb_strlen($img)
но я хотел бы получить число, подобное 16KiB
(или KB
).
Затем я сохраняю строку в MySQL
данных MySQL
в формате blob
, где я могу видеть ее размер с помощью PhpMyAdmin.
EDIT Если я использую strlen для получения размера байта строки (что мне нужно), я получаю другое значение из размера байта, отображаемого в моей базе данных MySQL (где строка не сохраняется как символ, а как блог, что означает двоичный), Как это может быть? И как я могу узнать, насколько большой будет размер двоичного файла при сохранении строки в базе данных.
Я сохраняю строку просто с помощью команды MySQL
INSERT INTO table (content, bla) VALUES ($string, bla);
(не совсем правильно, но, например, цель - это работает, когда правильно)
Теперь, когда я заглядываю в свою базу данных, он отображает мне размер, например, 315 КБ, но когда я беру $string
и делаю strlen на нем, он возвращает что-то вроде 240000 (не то же самое в битах, что и в КБ)
Я буду исследовать себя...
Это по сути то же самое, что и ответ Дани, но немного более компактный.
function human_filesize($bytes, $decimals = 2) {
$size = array('B','kB','MB','GB','TB','PB','EB','ZB','YB');
$factor = floor((strlen($bytes) - 1) / 3);
return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$size[$factor];
}
echo human_filesize(filesize($filename));
Источник: http://jeffreysambells.com/2012/10/25/human-readable-filesize-php