Allgemein Kostenlose Downloads PHP Snippets

[PHP][Snippet] Dateigrößen Funktions Klasse

Hallo,

Nachdem ich gestern den Schnippsel zum Konvertieren von Dateigrößen gepostet habe, habe ich nun eine komplette Klasse geschrieben, welche es euch ermöglicht von jeder beliebiegen einheit in eine andere zu rechnen, sowie die Bytes aus einer Einheit auszulesen und eine Funktion die euch Bytes automatisch schön Formatiert.

<?php
 
/**
* Bietet Funktionen zum umrechnen von Dateigrößen
*/
class FileUnitFunctions
{
	/**
	 * Gibt die Bytes einer beliebiegen Einheit zurück
	 * @param $in Die Größe z.B. 50mb, b, kb, mb, gb, tb, pb, eb, zb, yb
	 */
	function getBytesFrom($in)
	{
		$in = str_replace(",", ".", $in);
		$starteinheit = preg_replace("/[^kmgtpezyb]/", "", strtolower($in));
		$bytes = preg_replace("/[^0-9.]/", "", $in);
 
		// Rechne Starteinheit auf bytes
		switch ($starteinheit) {
			case 'kb':
				$bytes = $bytes * pow(1024, 1);
				break;
			case 'mb':
				$bytes = $bytes * pow(1024, 2);
				break;
			case 'gb':
				$bytes = $bytes * pow(1024, 3);
				break;
			case 'tb':
				$bytes = $bytes * pow(1024, 4);
				break;
			case 'pb':
				$bytes = $bytes * pow(1024, 5);
				break;
			case 'eb':
				$bytes = $bytes * pow(1024, 6);
				break;
			case 'zb':
				$bytes = $bytes * pow(1024, 7);
				break;
			case 'yb':
				$bytes = $bytes * pow(1024, 8);
				break;			
			default:
				$bytes = $bytes;
				break;
		}
		return $bytes;
	}
 
	/**
	 * Formatiert eine Größeneinheit in ein sauberes Format
	 * @param $in = Eine beliebige Größe mit Einheitsangabe
	 */
	function AutoFormatBytes($in)
	{
		$in = self::getBytesFrom($in);
		if($in >= pow(1024, 8))
		{
			return round($in / pow(1024, 8), 2)."yb";
		}
		elseif ($in >=pow (1024, 7)) 
		{
			return round($in / pow(1024, 7), 2)."zb";
		}
		elseif ($in >= pow(1024, 6)) 
		{
			return round($in / pow(1024, 6), 2)."eb";
		}
		elseif ($in >= pow(1024, 5)) 
		{
			return round($in / pow(1024, 5), 2)."pb";
		}
		elseif ($in >= pow(1024, 4)) 
		{
			return round($in / pow(1024, 4), 2)."tb";
		}
		elseif ($in >= pow(1024, 3)) 
		{
			return round($in / pow(1024, 3), 2)."gb";
		}
		elseif ($in >= pow(1024, 2)) 
		{
			return round($in / pow(1024, 2), 2)."mb";
		}
		elseif ($in >= pow(1024, 1)) 
		{
			return round($in / pow(1024, 1), 2)."kb";
		}
		else
		{
			return round($in / pow(1024, 0), 2)."b";
		}
	}
 
	/**
	 * Konvertiert eine Einheit in eine andere Einheit
	 * @param $from z.B. 50mb, b, kb, mb, gb, tb, pb, eb, zb, yb
	 * @param $to die Zieleinheit b, kb, mb, gb, tb, pb, eb, zb, yb
	 */
	function ConvertTo($from, $to)
	{
		// Lese die Starteinheit aus
		$bytes = self::getBytesFrom($from);
 
		switch (strtolower($to)) {
			case 'b':
				return round($bytes, 2); 		# Zu Byte
			case 'kb':
				return round($bytes / pow(1024, 1), 2); # Zu KiloByte
			case 'mb':
				return round($bytes / pow(1024, 2), 2); # Zu MegaByte
			case 'gb':
				return round($bytes / pow(1024, 3), 2); # Zu GigaByte
			case 'tb':
				return round($bytes / pow(1024, 4), 2); # Zu TerraByte
			case 'pb':
				return round($bytes / pow(1024, 5), 2); # Zu PetaByte
			case 'eb':
				return round($bytes / pow(1024, 6), 2); # Zu ExaByte
			case 'zb':
				return round($bytes / pow(1024, 7), 2); # Zu ZettaByte
			case 'yb':
				return round($bytes / pow(1024, 8), 2); # Zu YottaByte
			default:
				return round($bytes / pow(1024, 1), 2); # Standardmäßig zu KiloByte
		}
	}
}
 
?>

Beispiel

<?php
	// Variablen initialisieren
	$fuf = new FileUnitFunctions;
	$what = "123454KB";
 
	// Ausgabe der Umrechnungen
	echo "Bytes von Einheit: $what sind ".$fuf->getBytesFrom($what)."B <br>";
	echo "AutoFormatieren: $what sind sauber ".$fuf->AutoFormatBytes($what)."<br>";
	echo "Konvertiert: $what sind ".$fuf->ConvertTo($what, "GB")."GB";
?>

Ausgabe

Bytes von Einheit: 123454KB sind 126416896B
AutoFormatieren: 123454KB sind sauber 120.56mb
Konvertiert: 123454KB sind 0.12GB

Download
FileUnitFunctions.Developer-Heaven.de.zip

Viel Spaß damit 🙂


357x gelesen

Print Friendly, PDF & Email

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.