PHP: Dateigröße formatieren
Das Original ist hier zu finden: http://php.net/manual/de/function.filesize.php
function formatBytes($b,$p = null) { /** * returns formatted number of bytes. * two parameters: the bytes and the precision (optional). * if no precision is set, function will determine clean * result automatically. **/ $units = array("B","KiB","MiB","GiB"); $r = array('bytes'=>0,'units'=>''); $c=0; if(!$p && $p !== 0) { foreach($units as $k => $u) { if(($b / pow(1024,$k)) >= 1) { $r['bytes'] = $b / pow(1024,$k); $r['units'] = $u; $c++; } } return number_format($r['bytes'],2) . " " . $r['units']; } else { return number_format($b / pow(1024,$p)) . " " . $units[$p]; } }
PHP Zahlenformate Umwandeln
Hier in den Kommentaren gefunden:
http://de.php.net/manual/de/function.base-convert.php
Funktion
function custombase_convert_big ($numstring, $frombase, $tobase) { $from_count = strlen($frombase); $to_count = strlen($tobase); $length = strlen($numstring); $result = ''; for ($i = 0; $i < $length; $i++) { $number[$i] = strpos($frombase, $numstring{$i}); } do { // Loop until whole number is converted $divide = 0; $newlen = 0; for ($i = 0; $i < $length; $i++) { // Perform division manually (which is why this works with big numbers) $divide = $divide * $from_count + $number[$i]; if ($divide >= $to_count) { $number[$newlen++] = (int)($divide / $to_count); $divide = $divide % $to_count; } elseif ($newlen > 0) { $number[$newlen++] = 0; } } $length = $newlen; $result = $tobase{$divide} . $result; // Divide is basically $numstring % $to_count (i.e. the new character) } while ($newlen != 0); return $result; }
Beispiel:
$fromBase = '0123456789'; $toBase = '01'; echo custombase_convert_big('42', $fromBase,$toBase).'<br />';
Ich brauchte einen div der immer bis zum unteren Browserrand geht und oben einen trotzdem einen Abstand hat und der Scrollbalken sollte felherfrei funktionieren. Also 100% height und margin-top. Mit css allein war das nicht zu machen da der Scrollbalken sich um das margin-top nach unten rausgeschoben hat, also musste jquery herhalten.
Hier mal ein Beispiel für 100% height und margin-top: 20px;
html:
<div class="meindiv"> START<br /> text<br /> text<br /> text<br /> ENDE </div>
css:
.meindiv { height:100%; margin-top:20px; width:120px; overflow: auto; /*overflow-x: hidden;*/ }
js:
var habstand = 20 //var wabstand = 20 $(document).ready(function(){ // 100% höhe minus px die margin sein sollen var hohe = window.innerHeight; $(".meindiv").css("height",hohe - habstand); // 100% breite minus px die margin sein sollen //var weit = window.innerWidth; //$(".meindiv").css("width",weit - wabstand); }); $(window).resize(function(){ // 100% höhe minus px die margin sein sollen var hohe = window.innerHeight; $(".meindiv").css("height",hohe - habstand); // 100% breite minus px die margin sein sollen //var weit = window.innerWidth; //$(".meindiv").css("width",weit - wabstand); });
Das ganze funktioniert im: FF Opera Chrome Safari, jeweils in den aktuellen Versionen getestet. Der IE iss mir egal, arbeite nur mit mac. Wenn es einer im IE testen kann, bitte kurz n Kommentar hinterlass ob es da auch funktioniert, bitte dann mit IE Version.
php imagecreatefrombmp
Eine Funktion von mgutt, gefunden hier
function imagecreatefrombmp($filename) { // version 1.00 if (!($fh = fopen($filename, 'rb'))) { trigger_error('imagecreatefrombmp: Can not open ' . $filename, E_USER_WARNING); return false; } // read file header $meta = unpack('vtype/Vfilesize/Vreserved/Voffset', fread($fh, 14)); // check for bitmap if ($meta['type'] != 19778) { trigger_error('imagecreatefrombmp: ' . $filename . ' is not a bitmap!', E_USER_WARNING); return false; } // read image header $meta += unpack('Vheadersize/Vwidth/Vheight/vplanes/vbits/Vcompression/Vimagesize/Vxres/Vyres/Vcolors/Vimportant', fread($fh, 40)); // read additional 16bit header if ($meta['bits'] == 16) { $meta += unpack('VrMask/VgMask/VbMask', fread($fh, 12)); } // set bytes and padding $meta['bytes'] = $meta['bits'] / 8; $meta['decal'] = 4 - (4 * (($meta['width'] * $meta['bytes'] / 4)- floor($meta['width'] * $meta['bytes'] / 4))); if ($meta['decal'] == 4) { $meta['decal'] = 0; } // obtain imagesize if ($meta['imagesize'] < 1) { $meta['imagesize'] = $meta['filesize'] - $meta['offset']; // in rare cases filesize is equal to offset so we need to read physical size if ($meta['imagesize'] < 1) { $meta['imagesize'] = @filesize($filename) - $meta['offset']; if ($meta['imagesize'] < 1) { trigger_error('imagecreatefrombmp: Can not obtain filesize of ' . $filename . '!', E_USER_WARNING); return false; } } } // calculate colors $meta['colors'] = !$meta['colors'] ? pow(2, $meta['bits']) : $meta['colors']; // read color palette $palette = array(); if ($meta['bits'] < 16) { $palette = unpack('l' . $meta['colors'], fread($fh, $meta['colors'] * 4)); // in rare cases the color value is signed if ($palette[1] < 0) { foreach ($palette as $i => $color) { $palette[$i] = $color + 16777216; } } } // create gd image $im = imagecreatetruecolor($meta['width'], $meta['height']); $data = fread($fh, $meta['imagesize']); $p = 0; $vide = chr(0); $y = $meta['height'] - 1; $error = 'imagecreatefrombmp: ' . $filename . ' has not enough data!'; // loop through the image data beginning with the lower left corner while ($y >= 0) { $x = 0; while ($x < $meta['width']) { switch ($meta['bits']) { case 32: case 24: if (!($part = substr($data, $p, 3))) { trigger_error($error, E_USER_WARNING); return $im; } $color = unpack('V', $part . $vide); break; case 16: if (!($part = substr($data, $p, 2))) { trigger_error($error, E_USER_WARNING); return $im; } $color = unpack('v', $part); $color[1] = (($color[1] & 0xf800) >> 8) * 65536 + (($color[1] & 0x07e0) >> 3) * 256 + (($color[1] & 0x001f) << 3); break; case 8: $color = unpack('n', $vide . substr($data, $p, 1)); $color[1] = $palette[ $color[1] + 1 ]; break; case 4: $color = unpack('n', $vide . substr($data, floor($p), 1)); $color[1] = ($p * 2) % 2 == 0 ? $color[1] >> 4 : $color[1] & 0x0F; $color[1] = $palette[ $color[1] + 1 ]; break; case 1: $color = unpack('n', $vide . substr($data, floor($p), 1)); switch (($p * 8) % 8) { case 0: $color[1] = $color[1] >> 7; break; case 1: $color[1] = ($color[1] & 0x40) >> 6; break; case 2: $color[1] = ($color[1] & 0x20) >> 5; break; case 3: $color[1] = ($color[1] & 0x10) >> 4; break; case 4: $color[1] = ($color[1] & 0x8) >> 3; break; case 5: $color[1] = ($color[1] & 0x4) >> 2; break; case 6: $color[1] = ($color[1] & 0x2) >> 1; break; case 7: $color[1] = ($color[1] & 0x1); break; } $color[1] = $palette[ $color[1] + 1 ]; break; default: trigger_error('imagecreatefrombmp: ' . $filename . ' has ' . $meta['bits'] . ' bits and this is not supported!', E_USER_WARNING); return false; } imagesetpixel($im, $x, $y, $color[1]); $x++; $p += $meta['bytes']; } $y--; $p += $meta['decal']; } fclose($fh); return $im; }
Datei Dummies
Dieses Archiv enthält leere (bzw. mit dem Zeichen ’0′ gefüllte) Dummi Dateien, die benutzt werden können um z.B. Upload Formulare oder ähnliches zu testen.
Im Archiv (356 KiB ZIP) befinden sich Dateien in folgenden Größen:
- 1 KiB
- 1 bis 10 MiB
- 20,30,40 und 50 MiB
- 100 MiB
Aus folgendem Eingabe Array soll eine verschachtelte HTML – Liste werden:
Eingabe-Array:
$menu = array( 0 => array( 'title' => 'Home', 'id' => 1, ), 1 => array( 'id' => 2, 'title' => 'Team', 'subs' => array( 0 => array( 'id' => 3, 'title' => 'Michael', ), 1 => array( 'id' => 4, 'title' => 'Tim', ), 2 => array( 'id' => 5, 'title' => 'Dennis', 'subs' => array( 0 => array( 'id' => 6, 'title' => 'Lebenslauf', ), 1 => array( 'id' => 7, 'title' => 'Zeugnisse', 'subs' => array( 0 => array( 'id' => 8, 'title' => 'Zeugnis 1', ), 1 => array( 'id' => 9, 'title' => 'Zeugnis 2', ), 2 => array( 'id' => 10, 'title' => 'Zeugnis 3', ), ), ), ), ), ), ), 2 => array( 'title' => 'Kontakt', 'id' => 6, ), );
Und nun, ein bisschen tricky, die passende PHP Funktion:
function array2list($arr, $menu = null) { $menu = '<ul>'; for($i=0; $i<count($arr); $i++) { $menu.='<li>'.$arr[$i]['title']; $menu.=(isset($arr[$i]['subs']))?array2list($arr[$i]['subs'],$menu):'</li>'; } return($menu.='</ul></li>'); } echo substr(array2list($arr),0,-5);
Erzeugt folgende Ausgabe:
<ul> <li>Home</li> <li>Team <ul> <li>Michael</li> <li>Tim </li> <li>Dennis <ul> <li>Lebenslauf</li> <li>Zeugnisse <ul> <li>Zeugnis 1</li> <li>Zeugnis 2</li> <li>Zeugnis 3</li> </ul> </li> </ul> </li> </ul> </li> <li>Kontakt</li> </ul>
PHP Quelltext mit PHP ausgeben
… und zwar schön bunt! Eine nützliche Funktion dazu, die ich bisher noch nicht kannte:
mixed highlight_string ( string $str [, bool $return = false ] )
Mehr dazu in der PHP Hilfe: http://de2.php.net/manual/de/function.highlight-string.php
PHP: Spaß mit Farben
Hier mal ein paar Codeschnipsel rund um das Thema Farben:
Luminanz (Helligkeitswert) eines Farbtons:
$red = 255; $green = 170; $blue = 0; // 0=dunkel, 255 = hell : $l = round((0.2126 * $blue) + (0.7152 * $green) + (0.0722 * $blue));
Komplementärfarbe eines Farbtons:
$color = 'FFAA00'; $ccolor = sprintf('%06X',(~(1*('0x'.$color))&0xFFFFFF));
Habe dafür mal ein kleines jQuery Plugin geschrieben:
$.fn.selectBox = function(opt) { var sb = $(this); // selectBox var o = $.extend({ 'onSelect' : function(e) { }, 'animationSpeed' : 5000, 'animationSpeedBack' : 300 },opt); sb.children('li').each(function(){ var e = $(this); // text breite bestimmen: var testWidth = document.createElement('span'); $(testWidth).attr('id','testWidthID'); $(testWidth).html(e.text()); $('body').append(testWidth); e.data('textWidth',$('#testWidthID').width()); $('#testWidthID').remove(); e.click(function(){ $(sb).children('li.selected').removeClass('selected'); e.addClass('selected'); o.onSelect($(this)); }); $(this).mouseover(function(){ e = $(this); if (e.data('textWidth') > e.width()) { var newTextIndent = -(e.data('textWidth')-e.width()); e.stop(); e.animate({'textIndent':newTextIndent},o.animationSpeed,function(){ e.animate({'textIndent':0},o.animationSpeedBack); }); } }); $(this).mouseout(function(){ $(this).stop(); $(this).animate({'textIndent':0},o.animationSpeedBack); }); }); }
Aufruf so:
$(document).ready(function() { $('#selectbox').selectBox(); });
oder so, falls nach dem selektieren noch was ausgeführt werden soll, so:
$(document).ready(function() { $('#selectbox').selectBox({ 'onSelect' : function(e) { alert(e.text()); } }); });
Beispiel hier.
Dieses kleine aber praktische jQuery Plugin holt das aktuelle Element in den Vordergrund, indem der z-index auf maxZIndex gesetzt wird. Wird ein anderes Element angeklickt wird der z-index wieder auf den ursprünglichen Wert zurückgesetzt.
$.fn.zTop = function(opt) { var o = $.extend({ 'maxZIndex':1000 },opt); $('.jqueryZTop').each(function(){ $(this).removeClass('jqueryZTop'); $(this).zIndex($(this).data('zIndex')); }); $(this).addClass('jqueryZTop'); $(this).data('zIndex',$(this).zIndex()); $(this).zIndex(o.maxZIndex); }
Aufruf dann z.B. so:
$('#beispielDiv').mousedown(function(){ $(this).zTop(); });
oder (falls maxZIndex nicht 1000 sein soll) so:
$('#beispielDiv').mousedown(function(){ $(this).zTop({ maxZIndex : 999 }); });