Skip to content
Nov 17 11

PHP: Dateigröße formatieren

by dennis

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];
	}
}
Okt 25 11

PHP Zahlenformate Umwandeln

by dennis

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 />';
Mai 30 11

div mit 100% height minus margin als abstand zum rand

by axel

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.

Mrz 1 11

php imagecreatefrombmp

by dennis

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;
}
Feb 3 11

Datei Dummies

by dennis

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

dummies.zip

Jan 20 11

PHP: Verschachtelte Listen aus Arrays erzeugen (array2list)

by dennis

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>
Jan 20 11

PHP Quelltext mit PHP ausgeben

by dennis

… 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

Jan 18 11

PHP: Spaß mit Farben

by dennis

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));
Okt 6 10

jQuery: Horizontales scrollen in Selectboxen – Die coole Lösung

by dennis

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.

Sep 28 10

jQuery: Element in den Vordergrund holen (z-index)

by dennis

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
        });  
});