Autor | Zpráva | ||
---|---|---|---|
MyShare Profil |
Zdravím,
Mám taký menší problém s týmto kódom static public function formatSize( $size=0 ) { $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); $size = max( $size, 0 ); $pow = floor( ( $size ? log( $size ) : 0 ) / log(1024) ); $pow = min( $pow, count($units) - 1 ); $size /= pow( 1024, $pow ); return round( $size, 2 ) . ' ' . $units[ $pow ]; } Ďakujem za pomoc |
||
tiso Profil |
#2 · Zasláno: 30. 1. 2013, 00:17:55
MyShare: tá funkcia berie ako vstup iba číslo - počet bytov. Jednotky, ktoré tam chceš vložiť, sa ignorujú.
|
||
MyShare Profil |
#3 · Zasláno: 30. 1. 2013, 00:24:30
tiso:
Vďaka za odpoveď čo by si mi ty odporúčal? |
||
tiso Profil |
#4 · Zasláno: 30. 1. 2013, 00:28:30
MyShare: odporúčam ti popísať čo chceš dosiahnuť. Chceš prepísať tú funkciu, aby brala do úvahy i jednotky? Alebo čo?
|
||
MyShare Profil |
#5 · Zasláno: 30. 1. 2013, 00:35:02
tiso:
Samozrejme ide mi o to aby keď zadám 10737418240 kB (10 TB) aby mi to vyhodilo 10 TB a nie aby mi to prepísalo len do 4194304 kB (4 GB) alebo „ak zadám napr. 524288000 kB (500 GB) aby mi to nevyhodilo iba údaj 500 MB“ |
||
peta Profil |
str = "10737418240 kB"; // (10 TB) units = "kMGT"; n = str.replace(/[/D]/g,''); //smaze vse, co neni cislo u = str.replace(/[\d\sB]/g,''); //smaze vse, co je cislo, mezera nebo B k = units.indexOf(k); // vyhleda pozici retezce k v retezci str n = n * (10 ^ (k+1)); alert(n); A kdyz ted vypocitas nove k a u, tak to muzes zpetne prevest k = ... u = ... u = units.substring(k,1); // vyhleda pozici retezce k v retezci str return k + " " + u; |
||
MyShare Profil |
#7 · Zasláno: 30. 1. 2013, 14:04:18
peta:
Vďaka za pomoc ale tvoj kód mi vyhadzuje samé chyby |
||
Davex Profil |
#8 · Zasláno: 30. 1. 2013, 20:22:03
MyShare:
„Vďaka za pomoc ale tvoj kód mi vyhadzuje samé chyby“ On si jenom nevšiml, že používáš jiný programovací jazyk. Do večera mu dávám čas na opravu a pokud to nestihne, tak bude smazán. |
||
MyShare Profil |
#9 · Zasláno: 30. 1. 2013, 21:37:58
Davex:
Aj sa mi to zdalo, že niečo na tom je čudne napr. str.replace namiesto str_replace n namiesto $n atď ja nie som žiaden Guru v programovaní no len sa učím ale to by si asi každý všimol, že to nie je .php jazyk ale nevadí takže stále čakám na nejaké nakopnutie :) |
||
peta Profil |
Davex:
"Do večera mu dávám čas" Si myslis, ze ctu forum 24hodin denne? :) Spis zajimava otazka, jak to, ze to MyShare nepoznal? :) Preci, kdo dela php uz urcite ovlada i javascript, tak neni problem to prepsat do php, ne? :) $str = "10737418240 kB"; // (10 TB) $units = "kMGT"; $n = preg_replace('/[/D]/','',$str); //smaze vse, co neni cislo $u = preg_replace('/[\d\sB]/','',$str); //smaze vse, co je cislo, mezera nebo B $k = strpos($k,$units); // vyhleda pozici retezce k v retezci str $n = $n * (10 ^ ($k+1)); echo $n; |
||
tiso Profil |
#11 · Zasláno: 31. 1. 2013, 12:44:19
peta: spoznať si to mal ty: on tu dal funkciu v PHP, ty si mu napísal inú v Javascripte. Prečo?
|
||
MyShare Profil |
#12 · Zasláno: 31. 1. 2013, 14:22:30
peta:
Stále to nie je funkčné snažil som sa dosadiť $pow , $size ale nič s toho nezaberá ukazujeme ti len 0 a k tomu mi ešte hádže chybu
Warning: preg_replace() [function.preg-replace]: Unknown modifier ']' in Ale aj tak ďakujem za ochotu !!! |
||
peta Profil |
#13 · Zasláno: 1. 2. 2013, 12:33:55
'~[\D]~'
'~[\d\sB]~' Jsem myslel, ze si to uz doladis sam, ne? Na php.net mas manual a priklady. Nebudu vymyslet princit a jeste kazdy kod ladit do dokonalosti. Principialne bys mel pochopit, co to dela a pak uz si sam poradis. |
||
pcmanik Profil |
#14 · Zasláno: 1. 2. 2013, 14:18:54
peta:
Tak načo mu tu dávaš kód, ktorý si má aj tak doladiť nakoniec sám, a ktorý ani nieje funkčný? |
||
1Pupik1989 Profil |
#15 · Zasláno: 1. 2. 2013, 15:42:20
Tak jsem to zkusil také. Moc se mi to nelíbí, nicméně to funguje. Nevěděl jsem, jestli to má obsahovat i jednotky nebo ne.
<?php function formatSize($size = "0 kB"){ $units = Array("B","kB","MB","GB","TB"); preg_match("~(\d+)~",$size,$attr); $length = strlen($attr[1]); $size = floatval($attr[1]); $pow = floor(($length-1)/3); return $size/pow(1024,$pow)." ".$units[$pow+1]; }; echo formatSize("524288000 kB"); //500 GB ?> Verze bez jednotek: function formatSize($size = 0){ $units = Array("B","kB","MB","GB","TB"); $length = strlen("$size"); $pow = floor(($length-1)/3); return $size/pow(1024,$pow)." ".$units[$pow+1]; }; echo formatSize(524288000); //500 GB |
||
MyShare Profil |
1Pupik1989:
„ function formatSize($size = "0 kB"){ $units = Array("B","kB","MB","GB","TB"); preg_match("~(\d+)~",$size,$attr); $length = strlen($attr[1]); $size = floatval($attr[1]); $pow = floor(($length-1)/3); return $size/pow(1024,$pow)." ".$units[$pow+1]; } Tento kód je správny ibaže pri 4TB mi vyhodí vysledné 3.99999999907 TB a nepustí ma to na viac ako 4 TB teda ak dám na 5 TB automatický sa to prevedie na tých 4 TB |
||
Joker Profil |
#17 · Zasláno: 1. 2. 2013, 17:02:37
MyShare:
Zkoušel jsem tu funkci zkopírovat a ani jeden z těch problémů se neprojevil. Nicméně $size nemůže být s jednotkami, to nebude fungovat, musí to být jen číslo. |
||
MyShare Profil |
#18 · Zasláno: 1. 2. 2013, 17:15:18
Joker:
Sorry ale ja hlava maková som nepopísal, že sa jedná o jeden script už hotový takže ešte niekde asi bude zadefinovaná zmena veľkosti tak to skúsim pohľadať ale tento som našiel v functions.php a každá zmena vykonaná v tomto súbore sa prejaví aj na stránke ale skúsim to prehľadať ešte podrobnejšie .... |
||
1Pupik1989 Profil |
Joker:
No jo, máš pravdu, ta původní funguje úplně normálně. Už vím, proč to psalo i nepsalo blbost. Vstup je v bytech. Takže ne 524288000 kB ale 536870912000 B. :) echo formatSize(536870912000); //500 GB Pokud chcete vstup v kB, pak přepište: return round( $size, 2 ) . ' ' . $units[ $pow ]; na return round( $size, 2 ) . ' ' . $units[ $pow+1 ]; |
||
MyShare Profil |
#20 · Zasláno: 1. 2. 2013, 23:18:46
1Pupik1989:
Ako sa snažím tak sa snažím ale vždy je výsledok nulový zadám 4294967296 kB výsledok ? 4294967295 TB zadám 10737418240 kB výsledok? 4294967295 TB Neviem čím to je ale robím niekde chybu? static public function formatSize($size = "0 kB"){ $units = Array("B","kB","MB","GB","TB"); preg_match("~(\d+)~",$size,$attr); $length = strlen($attr[1]); $size = floatval($attr[1]); $pow = floor(($length-1)/3); return round( $size, 2 ) . ' ' . $units[ $pow+1 ]; } |
||
1Pupik1989 Profil |
Na tu moji funkci zapomeňte, ta původní co jste přikládal, je v pořádku. Vstup má v bajtech jako integer.
|
||
MyShare Profil |
#22 · Zasláno: 1. 2. 2013, 23:31:50
1Pupik1989:
Jasne ale prečo ma to nepustí na viac ako 4 TB? prečo keď zadám 10 TB čiže 10737418240 kB ma automatický vrátiť po uložení na 4 TB čiže 4294967296 kB ? |
||
1Pupik1989 Profil |
#23 · Zasláno: 1. 2. 2013, 23:57:59
Ještě zkuste:
<?php function formatSize($size=0){ $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); $size = max( $size, 0 ); $pow = floor((strlen("$size")-1)/3); $pow = min( $pow, count($units) - 1 ); $size /= pow( 1024, $pow ); return round( $size, 2 ) . ' ' . $units[ $pow ]; }; //echo formatSize(524288000); //500 GB echo formatSize(4398046511104); ?> Zkuste průběžně koukat, co jaká proměnná obsahuje. Po uložení znamená co? |
||
pcmanik Profil |
MyShare:
Skús sa radšej pozrieť sem. |
||
MyShare Profil |
Při zpracování BB značek došlo k samovolnému sežrání celého příspěvku. Pardon.
Takto po uložení v administrácii ... Tu je celý script functions.php Moderátor Davex: Vymazána tuna kódu, která se zdála naprosto zbytečná
<?php /** * Functions * * @author UploadScript * @since 16 July 2009 * @version 1 * @package Core * @copyright UploadScript */ /** * Text, language abstraction, and other localization functions */ class Functions_Text { /** * Format a size * * @access public * @param int File size * @return string Formatted file size * @see http://us2.php.net/manual/en/function.filesize.php#91477 */ static public function formatSize($size=0){ $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); $size = max( $size, 0 ); $pow = floor((strlen("$size")-1)/3); $pow = min( $pow, count($units) - 1 ); $size /= pow( 1024, $pow ); return round( $size, 2 ) . ' ' . $units[ $pow+1 ]; } } /** * User functions class */ class Functions_User { /** * Return max single file upload size * * @access public * @return int */ static public function getMaxUploadSize() { $_serverMax = 200000000; $_post = @ini_get('post_max_size'); $_upload = @ini_get('upload_max_filesize'); $_check = ( $_upload > $_post ) ? $_post : $_upload; if ( $_check ) { $_serverMax = $_check; preg_match( "#^(\d+)(\w+)$#", strtolower($_serverMax), $match ); if ( $match[2] == 'm' ) { $_serverMax = intval( $_serverMax ) * 1024 * 1024; } else if ( $match[2] == 'k' ) { $_serverMax = intval( $_serverMax ) * 1024; } else { $_serverMax = intval( $_serverMax ); } } $_userMax = isset(Registry::$member['max_filesize']) ? ( Registry::$member['max_filesize'] * 1024 ) : ( Registry::$settings['guest_max_size'] * 1024 ); return $_serverMax > $_userMax ? $_userMax : $_serverMax; } } |
||
pcmanik Profil |
#26 · Zasláno: 2. 2. 2013, 00:17:17
MyShare:
Svoj obrovský kód, ktorý sa sem naviac ani nevošiel si sem zbytočne dával, nikto ho pozerať nebude, radšej sa pozri na odkaz v [#24]. To lepíš všetky kódy, ktoré nájdeš na internete dokopy? |
||
MyShare Profil |
#27 · Zasláno: 2. 2. 2013, 00:23:16 · Upravil/a: MyShare
pcmanik:
Ani jedno z toho nepomohlo stále sa to automatický vrátiť na 4 TB i keď zadám 10 TB Takže sorry za moju hlúposť ale toto čo je v script functions.php static public function formatSize( $size=0 ) { $units = array( 'B', 'KB', 'MB', 'GB', 'TB' ); $size = max( $size, 0 ); $pow = floor( ( $size ? log( $size ) : 0 ) / log(1024) ); $pow = min( $pow, count($units) - 1 ); $size /= pow( 1024, $pow ); return round( $size, 2 ) . ' ' . $units[ $pow ]; } $_displayMaxSpace = $_maxDiskspace ? Functions_Text::formatSize( $_maxDiskspace ) : "Unlimited"; $_displayMaxBw = $_bandwidthWeek ? Functions_Text::formatSize( $_bandwidthWeek ) : "Unlimited"; $_displayUsedSpace = Functions_Text::formatSize( $filesize['filesize'] ); $_displayBwUsed = Functions_Text::formatSize( $bandwidth['used'] ); $_displaySpaceP = $_maxDiskspace ? ( $filesize['filesize'] ? round( ( $filesize['filesize'] / $_maxDiskspace ) * 100 ) : '0' ) . '%' : '0'; $_displayBwP = $_bandwidthWeek ? ( $bandwidth['used'] ? round( ( $bandwidth['used'] / $_bandwidthWeek ) * 100 ) : '0' ) . '%' : '0'; $_displaySpacePP = $_displaySpaceP ? '(' . $_displaySpaceP . ')' : ''; $_displayBwPP = $_displayBwP ? '(' . $_displayBwP . ')' : ''; |
||
Časová prodleva: 3 dny
|
|||
peta Profil |
pcmanik: Od lidi predpokladam urcitou inteligenci a schopnost samostatne pracovat, vyhledavat v manualu a kod is sam opravit. Ja ho muzu navest jen k reseni, nejsem placeny za to, aby delal jeho praci. Spousta lidi toho tu zneuziva pro milionove projekty.
<?php $t = array(); $str = "10737418240 kB"; $units = "kMGT"; $n = preg_replace('~[\D]~' ,'', $str); $u = preg_replace('~[\d\sB]~','', $str); $t[] = "cislo-jednotka: " . $n ."-" . $u; $u = strpos($units, $u) + 1; // opraveny jmena promennych $t[] = "jednotka: " . $u; $n = $n * pow(2, $u * 10); // opravene na pow a opravene na binarni soustavu z dekadicke $t[] = $n; echo implode($t, "<br>"); ?> |
||
pcmanik Profil |
#29 · Zasláno: 4. 2. 2013, 20:20:06
peta:
Kebyže ho chceš naviesť, hodíš mu sem nejaké odkazy, poprípade teoreticky popíšeš ako to spraví, ale nie že mu sem dáš nefunkčný kód. Hádam by si neprišiel pýtať niekto z "miliónového" projektu radu ako má napísať kód... Skôr by som od nich očakával, že by tu len niečo skonzultovali, poprípade aby sme ich usmernili. No určite nie robiť im kódy. |
||
Časová prodleva: 11 let
|
0