Кратко конвертиране на байтове

dakata__92

Super Moderator
Имам функцията memory_get_usage() която връща байтове. Интересува ме как в един ред с възможно най-малко писане да обработим байтовете така, че да са в по-четим варянт(KB,MB,GB,TB). Намерих доста функциии в нета но нищо сбито което да се побира на един ред и да е максимално кратко за писане. Нямам проблем търсих в нета функции които връщат резултат много просто ми трябва нещо адски сбито и кратко но не се сещам как ще стане на един ред.
 
бе на 1 ред чак ... :D :D :D

иначе това не ти ли върши работа ?


Код:
$base = log($size) / log(1024);
$suffix = array("", "k", "M", "G", "T")[floor($base)];
return pow(1024, $base - floor($base)) . $suffix;

като $size ще е това което подаваш. :?: :?: [/code]
 
mapka7a каза:
бе на 1 ред чак ... :D :D :D

иначе това не ти ли върши работа ?


Код:
$base = log($size) / log(1024);
$suffix = array("", "k", "M", "G", "T")[floor($base)];
return pow(1024, $base - floor($base)) . $suffix;

като $size ще е това което подаваш. :?: :?: [/code]
Принципно това не е проблем, но идва проблема друг. Имам
PHP:
$globalFunctions = "
function getApplicationStatus(){
	\$s["memory_in_use"] = memory_get_usage();
	\$s["memory_peak_use"] = memory_get_peak_usage();
	return \$s;
}
";
код който създава функция във друг файл. Въпроса ми е как да сбия този код така че да не се изписва много ама много и на двете променливи. Тоест желая да е нещо сбитичко за да може да се обработва добре като стринг и да не е много код. Отделна функция няма да създавам в стринга защото реално ще стане глобална за цялото приложение а не ми е нужна.
 
Аз никога не съм го ползвал и нямам представа дали е добра практика, но виж дали това няма да свърши работа - http://php.net/manual/en/function.override-function.php
 
anonimen каза:
Аз никога не съм го ползвал и нямам представа дали е добра практика, но виж дали това няма да свърши работа - http://php.net/manual/en/function.override-function.php
Не няма да стане. Проблема е че в масива имам още стойности които изчисляват различни екстри като инклуднати файлове и време на зареждане. Проблема ми е че ако драсна още една функция която да създам става глобална за цялото приложение а реално не ми е нужна някъде си да се вика и да стои заредена. Просто търся някакъв компромис и се надявам да ми помогнете малко да не се налага да повтарям много код.
 
Когато направя така след извикване на getAppPerformance() функцията bytesFormat() също става глобална за приложението а не го искам...
PHP:
function getAppPerformance(){
	function bytesFormat($size){
		$base = log($size, 1024);
		$suffixes = array("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");  
		return pow(1024, $base - floor($base)) . $suffixes[floor($base)];
	}
	$end = microtime(true);
	$s["memory_in_use"] = bytesFormat(memory_get_usage());
	$s["memory_peak_use"] = bytesFormat(memory_get_peak_usage());
	return $s;
}

echo '<pre>';
print_r(getAppPerformance());
echo '<br>';
print bytesFormat(memory_get_usage());
echo '</pre>';
 
Просто я присвояваш на променлива, която ще е локална за getAppPerformance :?:

PHP:
function getAppPerformance(){
        $bytesFormat = function ($size){
                $base = log($size, 1024);
                $suffixes = array("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");  
                return pow(1024, $base - floor($base)) . $suffixes[floor($base)];
        }
        $end = microtime(true);
        $s["memory_in_use"] = $bytesFormat(memory_get_usage());
        $s["memory_peak_use"] = $bytesFormat(memory_get_peak_usage());
        return $s;
}
 
anonimen каза:
Просто я присвояваш на променлива, която ще е локална за getAppPerformance :?:

PHP:
function getAppPerformance(){
        $bytesFormat = function ($size){
                $base = log($size, 1024);
                $suffixes = array("B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB");  
                return pow(1024, $base - floor($base)) . $suffixes[floor($base)];
        }
        $end = microtime(true);
        $s["memory_in_use"] = $bytesFormat(memory_get_usage());
        $s["memory_peak_use"] = $bytesFormat(memory_get_peak_usage());
        return $s;
}

Лелеееее било ми е пред очите през цялото време! Благодаря ти колега! +1 :?:
 
Ти май обаче не разбра обаче какво имах предвид с "override_function" - идеята ми беше да презапишеш съществуващата get_memory_usage така, че тя да ти връща данните във форматиран вид, нещо такова:

PHP:
override_function ('memory_get_usage', '', "/*това, което връща форматиран изход, само че записано в стринг*/") ;

По този начин директно ще получаваш желания резултат още с извикването на override-ната функция memory_get_usage.
Само че не знам доколко това е добра практика, все пак виждам, че гониш performance.
И няма ли да е по-бързо вместо всеки път да създаваш локална функция, да я имша през цялото време готова за ползване?
 

Back
Горе