tohokuaikiのチラシの裏

技術的ネタとか。

ini_get('memory_limit')で得られるファイルサイズを数値にする関数

メモ代わり。

<?php
        /**
         * @brief 128M => 134217728, 2G => 2147483648
         * @param string
         * @retval int
         */
         function memoryString2Int($string)
         {
             $byte = 0;
             if (preg_match("@^(\d+)([KMGT])$@", $string, $m)){
                 $powparam = 0;
                 switch ($m[2]){
                   case "K":
                     $powparam = 1;
                     break;
                   case "M":
                     $powparam = 2;
                     break;
                   case "G":
                     $powparam = 3;
                     break;
                   case "T":
                     $powparam = 4;
                     break;
                 }
                 $byte = $m[1] * pow(1024, $powparam);
             }
             
             return $byte;
         }

その逆

互換性はない。

<?php
function number_format_filesize($string)
{
        $size = intval($string);
        $unit = "Byte";

        $units = array(
                1             => "B",
                1000          => "kB",
                1000000       => "MB",
                1000000000    => "GB",
                1000000000000 => "TB",
                );

        foreach ($units as $key=>$value){
                if ($size/$key<1000){
                        $s = sprintf("%f", $size/$key);
                        return trim(substr($s, 0, 4),".") . $value;
                        break;
                }
        }

        return $string;
}