source: projects/web-frontend/generator.php @ 1

Last change on this file since 1 was 1, checked in by sven, 11 years ago

Erstimport

File size: 22.3 KB
Line 
1<?php
2
3// Konstanten:
4$draw_program = "../visualisator/binary";
5
6// Ausgabeordner (ohne trailing slash)
7$output_dir = "temp";
8
9// mit Verbose-Switch wird der Programmaufruf verbose.
10$verbose = isset($_GET['verbose']) || isset($_POST['verbose']);
11$ajax = isset($_GET['ajax']); // ajax-antwort oder normale Webseite anzeigen?
12
13if(!$ajax)
14    echo makeHeader('Lochstreifenvisualisierung online');
15
16function makeHeader($title) {
17    // als Funktion wg. Report-Datei, die später noch generiert wird.
18    return <<<HERE
19<html>
20<head>
21   <title>$title - technikum29 Private Zone</title>
22   <link rel="stylesheet" href="http://dev.technikum29.de/src/private.design/style.css" type="text/css">
23   <link rel="stylesheet" href="design/formular.css" type="text/css">
24   <!--<script type="text/javascript" src="design/formular.js"></script>--><!-- hier nicht mehr -->
25   <meta name="date.initial" value="02.04.2008">
26   <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
27</head>
28<body>
29<h1><a href="../"><span>technikum29.de interne Projekte:</span></a><strong>Lochstreifenprojekt: Visualisierung</strong></h1>
30HERE;
31}
32
33/*
34 * Übersicht über POST-Parameter, die entgegen genommen werden:
35 
36   *'data-src' = file|input|font
37     -> file => 'data-file' (dateiupload)
38     -> form => 'data-form' = hex[0]|oct|bin|dec
39                'data-input' = auf Länge checken und format
40     -> font => 'data-text' = auf gute Zeichen checken ([a-zA-Z0-9 ])
41
42   *'format' = PNG|SVG
43   *'dimension-src' = width|height|diameter
44     -> width => dimension-width
45     -> height => dimension-height        jeweils auf int checken
46     -> diameter => dimension-diameter
47
48   *'alignment' => hor-[rtl|ltr]-[l|r] | ver-[btt|ttb]-[u|o]
49
50   komponenten = imagebg|tapebg|punched|notpunched|feedholes
51
52   *'show-'+[komponenten]  (nur toggle an/aus)
53   *'color-'+[komponenten] => #RRGGBB
54   *'lucency-'+[komponenten] => AA
55
56   *'empty-start', 'empty-end' => int
57*/
58
59if(empty($_POST)) {
60    // so einfach ist das.
61    print '<h2>Parameter fehlen</h2>';
62    exit; // ;)
63}
64
65function get($var) {
66    // kleine Helperfunktion
67    return isset($_POST[$var]) ? $_POST[$var] : false;
68}
69
70function my_ctype_digit($string) {
71    // meine Implementierung dieser netten Funkion
72    return preg_match('/^[0-9]+$/', $string);
73}
74
75// Sofort tötende Fehler. Anzuwenden bei brutalen Fehlern, die nicht
76// auf Fehleingabe im Formular berufen (Angriffsgefahr)
77function print_fatal($text) {
78    print "<h2>Falsche Benutzung!</h2>\n";
79    print '<p class="big-error">'.$text."</p>\n";
80    print "<p>Dieser Fehler wäre nicht aufgetreten, hätten sie das Formular benutzt.</p>";
81    exit;
82}
83
84// das große Fehlerarray.
85$errors = array();
86// das nicht-tödliche Warnungsarray
87$warnings = array();
88
89// mit allen Fehlern beenden
90function exit_errors() {
91    global $ajax,$errors,$warnings;
92
93    print "<h2>Fehler in den angegeben Daten</h2>";
94    foreach($warnings as $error) {
95        print '<p class="big-warning">'.$error."</p>\n";
96    }
97    foreach($errors as $error) {
98        print '<p class="big-error">'.$error."</p>\n";
99    }
100    if($ajax) {
101        print "<p>Gehen sie zurück zum Formular und korrigieren sie ihre Fehleingaben.
102               Klicken sie dann nochmals auf <i>Generieren</i>.</p>";
103        print '<p><a href="javascript:history.go();">Zurück zum Formular</a></p>';
104    }
105    exit;
106}
107
108// Schritt 1: Eingaben entgegennehmen und validieren
109
110// 1/6: Punch-Daten
111$input_source = get('data-src');
112switch($input_source) {
113    case 'file': // Dateiupload. Tja. Datei direkt dem Programm übergeben. Vorher
114                 // Größe checken. Also mal los:
115                 if($ajax) {
116                     // wenn Ajax benutzt wird, wird die Datei noch nicht hochgeladen.
117                     break; // also erst anschließend machbar.
118                 }
119                 if(!isset($_FILES['data-file'])) {
120                     $errors[] = "Keine Datei hochgeladen, obwohl Dateiupload als Datenquelle ausgewählt war!";
121                 } elseif($_FILES['data-file']['size'] > 500*1024) {
122                     $errors[] = "Die hochgeladene Datei ist größer als ein 500kb. Derart große
123                                  Lochstreifen sind aus Perfomancegründen nicht erlaubt. Laden sie
124                                  sich das Visualisierungsprogramm runter und erstellen sie lokal
125                                  ihre Mammutlochstreifen.";
126                 } elseif($_FILES['data-file']['size'] == 0) {
127                     $warnings[] = "Die hochgeladene Datei ist leer (0 Bytes Inhalt). Das gibt keinen sonderlich
128                                    spannenden Lochstreifen...";
129                 }
130                 $original_filename = $_FILES['data-file']['name']; // fuer den Report weiter unten
131                 $input_filename = $_FILES['data-file']['tmp_name'];
132                 // usw.
133                 break;
134    case 'input': // Daten direkt eingetippt. Na dann...
135                 $text = get('data-input');
136                 $form = get('data-form');
137                 $input_binary = 'abc';
138                 $parts = preg_split("/\s+|\n+/", $text);
139                 foreach($parts as $x => $byte) {
140                     if(!strlen($byte)) continue; // nur whitespace, Abfall durch das preg_split.
141
142                     // Alle Formen zu dezimal umwandeln.
143                     if($form == 'bin')
144                         $byte = bindec($byte);
145                     elseif($form == 'hex')
146                         $byte = hexdec($byte);
147                     elseif($form == 'oct')
148                         $byte = octdec($byte);
149                     elseif($form == 'hex0')
150                         $byte = hexdec(substr($byte,2)); // 0x wegschneiden.
151                     elseif($form != 'dec') {
152                         $errors[] = "Fehler: Ungültige Datenform <i>$form</i>!";
153                         break;
154                     }
155
156                     if(!is_numeric($byte)) {
157                         $errors[] = "Fehler: Byte $x mit dem Wert <i>$byte</i> ist keine entsprechende
158                                      Zahl des Types <i>$form</i>. Vielleicht haben sie nicht das
159                                      passende Format eingestellt, in dem sie ihre Daten eingegeben haben?";
160                         break;
161                      }
162
163                      $input_binary .= chr($byte); // <- the PHP way | the Perl way -> pack('C', $byte);
164                 } // foreach
165                 if(strlen($input_binary) > 1024*1024) {
166                     $errors[] = 'Sie haben über eine Millionen Bytes eingetippt! Derart große
167                                  Lochstreifen sind aus Perfomancegründen nicht erlaubt. Laden sie
168                                  sich das Visualisieurngsprogramm runter und erstellen sie ihren
169                                  Monsterstreifen lokal.';
170                     break; 
171                 } elseif(strlen($input_binary) == 0) {
172                     $errors[] = 'Sie haben keine Daten eingegeben, obwohl direkte Byteeingabe als
173                                  Datenquelle ausgewählt wurde!';
174                     break;
175                 }
176                 // so, jetzt liegts als $input_binary vor.
177                 break;
178    case 'font': // Text, der gepuncht werden soll
179                 $text = get('data-text');
180                 if(!preg_match('/^[a-zA-Z0-9 ]+$/', $text)) {
181                     $warnings[] = 'Im Text befinden sich nichtdruckbare Zeichen. Nur Buchstaben und Zahlen
182                                    können dargestellt werden, keine anderen Zeichen.';
183                 }
184                 if(strlen($text) == 0) {
185                     $errors[] = 'Sie haben keinen Text eingegeben, obwohl Textgenerierung als Datenquelle
186                                  ausgewählt wurde!';
187                 }
188                 if(strlen($text) > 1000) {
189                     $errors[] = 'Der Text ist mit über 1000 Zeichen eindeutig zu lang.
190                                  Aus Perfomancegründen ist das nicht erlaubt. Laden sie sich die
191                                  entsprechenden Programme runter und erstellen sie ihren Streifen lokal.';
192                 }
193                 // irgendwas mit dem Text machen.
194                 // und als $input_binary fertig machen.
195                 $input_binary = 'abc';
196                 break;
197    default:     $errors[] = "Ungültige Datenquelle! Es konnten keine Daten entgegengenommen werden!";
198}
199
200// 2/6: Formatfragen.
201$format = strtolower(get('format'));
202if($format != 'png' && $format != 'svg') {
203    $errors[] = "Ungültiges Ausgabeformat <i>$format</i>! Erlaubt sind nur PNG und SVG!";
204}
205
206// 3/6: Dimensionen
207$dsrc = get('dimension-src');
208if($dsrc == 'width' || $dsrc == 'height' || $dsrc == 'diameter') {
209    $size = get("dimension-$dsrc");
210    if(!my_ctype_digit($size)) {
211        $errors[] = "Die Größenangabe zu den Dimensionen, die der Lochstreifen annehmen soll,
212                     ist fehlerhaft: $size ist keine positive ganze Dezimazahl!";
213    } elseif($dsrc == 'diameter' && $size > 100) {
214        $errors[] = "Der Durchmesser eines Loches ist mit 100 pxieln zu groß, ein so großes Bild
215                     darf aus Perfomancegründen nicht generiert werden. Bitte kleineren Wert
216                     einstellen.";
217    } elseif($size > 1000*100) {
218        $errors[] = "Die Größenangabe von über 100.000 Pixel ist viel zu groß. Bitte kleineren Wert
219                     einstellen.";
220    }
221    // alles klar. $size und $dsrc
222} else
223    $errors[] = "Es wurde keine Größenangabe zum Lochstreifen gemacht!";
224
225
226// 4/6: Ausrichtung des Lochstreifens
227$alignment = get('alignment');
228if(preg_match('/^(hor)-(rtl|ltr)-([ou])$|^(ver)-(btt|ttb)-([lr])$/', $alignment, $m)) {
229    // so, jetzt mal zusammenpuzzeln...
230} else
231    $errors[] = "Ungültige Ausrichtung des Lochstreifens: $alignment war nicht in der Auswahl!";
232
233
234// 5/6: Den ganzen komponentenweiten Kram
235$comp = array('imagebg', 'tapebg', 'punched', 'notpunched', 'feedholes');
236$comp_visibility = array(); $comp_color = array();
237$comp_translation = array('Bildhintergrund', 'Lochstreifen', 'Löcher', 'Nicht-Löcher', 'Führungslöcher');
238
239foreach($comp as $x => $component) {
240    $comp_visibility[$x] = get("show-$component") ? 1 : 0;
241    $color = substr(get("color-$component"), 1); // das "#" wegstrippen
242    $lucency = get("lucency-$component");
243    if(!preg_match('/^[0-9a-fA-F]{6}$/', $color)) {
244        $errors[] = "Die Farbangabe <i>$color</i> für den Komponenten <i>$component</i> ist keine korrekte Hexadezimalfarbangabe.";
245        continue;
246    } elseif(!preg_match('/^[0-9a-fA-F]{2}$/', $lucency)) {
247        $errors[] = "Die Transparenzangabe <i>$lucency</i> für den Komponenten <i>$component</i> ist nicht korrekt.";
248        continue;
249    }
250    $comp_color[$x] = "#${color}${lucency}";
251}
252
253// 6/6: Empty-start, Empty-End
254$empty_start = get('empty-start');
255$empty_end = get('empty-end');
256if(!my_ctype_digit($empty_start))
257    $errors[] = "Die Anzahl leerer Startbytes ist keine positive ganze Zahl ($empty_start)";
258if(!my_ctype_digit($empty_end))
259    $errors[] = "Die Anzahl leerer Endbytes ist keine positive ganze Zahl ($empty_end)";
260
261// fertig.
262
263// Fehler ausgeben und beenden.
264if(!empty($errors)) {
265    exit_errors();
266}
267
268// keine Fehler aufgetreten und in Ajax-Mode: "ok" zurückgeben
269if($ajax) {
270    echo "ok";
271    exit;
272}
273
274// Wenn wir hier sind, gehts schon mal weiter.
275
276echo '<h2>Lochstreifengenerator</h2>';
277
278if(!empty($warnings)) {
279    // es gibt Warnungen...
280    echo '<p>Es sind Probleme aufgetaucht, die allerdings nicht wirklich schlimm sind, der
281          Lochstreifen wurde trotzdem generiert:</p>';
282    foreach($warnings as $error) {
283        print '<p class="big-warning">'.$error."</p>\n";
284    }
285}
286
287// so, Parameter zusammenfummeln.
288
289$exec_params = '';
290
291// 2/6: Format:
292$exec_params .= "-f$format ";
293
294// 6/6 Empty Bytes:
295if($empty_start) $exec_params .= "--empty-start=$empty_start ";
296if($empty_end)   $exec_params .= "--empty-end=$empty_end ";
297
298// 5/6 Komponenten
299foreach($comp as $x => $component) {
300    if($comp_visibility[$x]) {
301        $exec_params .= "--color-$component=".$comp_color[$x].' ';
302    } else {
303        $exec_params .= "--hide-$component ";
304    }
305}
306
307// 3/6  Dimensionen
308$exec_params .= "--$dsrc=$size";
309
310// 4/6 Transformations and Rotations
311$exec_params .= $transformation_string.' ';
312
313// Output Filename erstellen
314$source_range = array_merge(range('a','z'), range('0', '9'));
315$output_hash = '';
316foreach(array_rand($source_range, 10) as $x) { $output_hash .= $source_range[$x]; }
317/* //alternativ sowas wie:
318$tmpx = mt_rand(0,32); // tempoaer fuer nen kurzen hash
319if($tmpx-32 < 10) $tmpx *= -1;
320$output_hash = substr(md5(rand() * time()), $tmpx, $tmpx+10);*/
321
322$image_filename = $output_dir.'/'.$output_hash.'.'.$format;
323$exec_params .= "--output=$image_filename";
324
325// 1/6 Input Data
326if($input_source == 'file') {
327    $exec_params .= "  '".$input_filename."'";
328} else {
329    // Binäre Daten liegen als $input_binary vor und wollen
330    // per STDIN eingefüttert werden.
331}
332
333print "<p>Der Lochstreifen wird nun generiert...\n";
334flush(); // damit er das wenigstens sieht...
335
336if($verbose) {
337    print "<h2>Verbose-Ausgaben</h2>";
338    print "<p>Alles zusammengepanscht ergibt:</p>";
339    print "<tt>$draw_program $exec_params</tt>";
340    print "<p>Rufe auf...\n";
341}
342
343// in PHP brauchts nen mörderischen Aufwand, um jetzt dieses
344// Programm anzuschmeißen:
345
346$proc_ressource = proc_open("time $draw_program ".($verbose?'--verbose ':' ').$exec_params, array(
347    // descriptor array (0=stdin, 1=stdout, 2=stderr, like sh)
348    0 => array('pipe', 'r'), // Programm wird von STDIN lesen
349    1 => array('pipe', 'w'), // und zu STDOUT schreiben
350    2 => array('pipe', 'w'), // und zu STDERR auch schreiben
351), $pipes, NULL , NULL );
352
353if(is_resource($proc_ressource)) {
354    if($input_source != 'file') {
355        // Daten reinschreiben
356        fwrite($pipes[0], $input_binary);
357    }
358    fclose($pipes[0]); // nichts mehr zu schreiben
359
360    // STDOUT/STDERR lesen
361    $stdout = stream_get_contents($pipes[1]); 
362    $stderr =  stream_get_contents($pipes[2]); // fuer Speicherung der <times>-Ausgaben.
363
364    fclose($pipes[1]);
365    fclose($pipes[2]);
366    $return_value = proc_close($proc_ressource);
367
368    if($return_value) {
369        print "<p class='big-error'>Fehler: Generator wurde nicht ordnungsgemäß ausgeführt, das
370               Programm beendete mit <u>Statuscode $return_value</u>.</p>";
371    }
372
373    if($return_value || $verbose) {
374        if(!$verbose) {
375            print "<p>Folgende Ausgaben wurden zwecks Fehlersuche abgefangen:</p>\n";
376            print "<p>Aufruf: <tt>$draw_program $exec_params</tt>";
377        }
378
379        print "<pre>";
380        print "<b>STDOUT:</b>\n";
381        echo $stdout;
382
383        print "\n<b>STDERR:</b>\n";
384        echo $stderr;
385        print "</pre>";
386        print "\n<b>Return Value $return_value</b>\n";
387
388    }
389
390    // checken ob was gemacht wurde.
391    if(!is_file($image_filename)) {
392        print "<p class='big-error'>Gewünschtes Bild konnte nicht erstellt werden!</p>";
393        exit; // dann brauchts auch kein Report und so. Der braucht nämlich die Datei.
394    }
395} else
396    print '<p class="big-error">Konnte Generatorprozess nicht starten!</p>';
397
398// + Übersichtsseite machen, erst mal in String, und ausgeben.
399$dir_url = dirname($_SERVER['PHP_SELF']);
400$image_url = "$dir_url/$image_filename";
401$report_file = $output_dir.'/'.$output_hash.'.htm';
402$report_url = "$dir_url/$report_file";
403$filesize = DataSizeFormat(filesize($image_filename));
404
405$report = "<p>Der folgende Lochstreifen wurde am <b>".date('m.d.Y')." um ".date('H:i:s')." Uhr</b> von dem
406              Besucher mit der <b>IP-Adresse $_SERVER[REMOTE_ADDR]</b> generiert. Die erstellte Datei vom
407              Typ <b>".strtoupper($format)."</b> ist <b>$filesize</b> groß";
408
409if($format == 'png') {
410    $imagesize = GetImageSize($image_filename);
411    $report .= ", sie hat die Ausmaße von <b>$imagesize[0] x $imagesize[1]</b> Pixel.</p>\n";
412    $report .= "<p>Das Bild wurde gespeichert unter der Adresse <b><a href='$image_url'>$image_url</a></b>
413                und kann z.B. zur Weiterverwendung runtergeladen werden. Es sieht so aus:</p>
414                <p><img src='$image_url' alt='Der generierte Lochstreifen' $imagesize[2]></p>";
415} else {
416    $report .= ".</p><p>Das Bild wurde unter der Adresse <b><a href='$image_url'>$image_url</a></b> gespeichert.
417                Mit einem modernen Browser (Nicht Internet Explorer) können sie sich die SVG-Datei durch
418                Anklicken des Linkes anschauen. Laden sie sich (ansonten) die Datei runter und öffnen sie
419                es mit einem Vektorgrafikprogramm, z.B. mit dem frei erhältlichen <a href='www.inkscape.org'
420                >Inkscape</a>.</p>";
421}
422
423// Discmailer ;-)
424$report .= "<p>Bitte beachten sie: Die Verfügbarkeit des Bildes auf diesem Server gehört nicht in den
425            \"Dienstleistungsumfang\" des Generierungsprogramms. Das heißt, dass sie <u>durch Eingeben ihrer
426            Daten zugestimmt haben, dass diese mit dem Bild nach freiem Ermessen des Administrators gespeichert
427            werden und willkürlich gelöscht werden können</u>. Es besteht kein Anspruch auf selbst zeitlich
428            begrenztes Hosting! Wenn sie das Bild im Internet verfügbar machen wollen, können sie es z.B.
429            auf kostenlosen Bilderhostern hochladen. Suchen sie dazu mit der Suchmaschine ihres Vertrauens
430            nach so etwas wie z.B. \"<a href='http://www.google.de/search?q=free+image+hosting'
431            >image hosting</a>\"</i></p>";
432
433$report .= "<h3>Die Daten</h3>";
434
435// Daten als HEX aufbereiten
436if($input_source == 'file')
437    $input_binary = file_get_contents($input_filename);
438$report_input_source = array(
439    'file' => "als eine Datei mit dem Namen <b>$original_filename</b> hochgeladen",
440    'input' => "<b>$form</b>-kodiert eingetippt",
441    'font' => "als zu generierende Schrift eingetippt, zugrunde lag der Text <b>$text</b>"
442);
443
444$report .= "<p>Die Daten, die dem generierten Lochstreifen zugrundeliegen, wurden vom Benutzer
445            $report_input_source[$input_source]. Im folgenden wird ein Hexdump der <b>".strlen($input_binary)."
446            Bytes</b> angegeben, mit denen letztendlich der Lochstreifen generiert wurde. Mit geeigneten
447            Hilfmitteln (z.B. einem Hexeditor) können sie aus den Daten eine Binärdatei erstellen.";
448
449$report .= "<pre>";
450for($x=0; $x<strlen($input_binary); $x++) {
451    $report .= sprintf("%02x ", ord($input_binary[$x]));
452    if((($x+1) % 20) == 0) {
453        $report .= "\n";
454    }
455}
456$report .= "</pre>";
457
458// weitere Parameter abhandeln.
459
460$report .= "<h3>Weitere Parameter</h3>";
461
462$report .= "<p>Folgende Einstellungen/Farben liegen dem Lochstreifen zugrunde:</p><ul>";
463
464foreach($comp as $x => $c) {
465    $report .= "<li><b>$comp_translation[$x]</b> ($c): ".
466               ($comp_visibility[$x] ? "sichtbar, und zwar mit der Farbe <b>$comp_color[$x]</b> (Format #RRGGBBAA)"
467                                     : "nicht sichtbar (deaktiviert)");
468}
469
470$report .= "</ul>";
471
472$report .= "<p>Außerdem wurden <b>$empty_start leere Startbytes und $empty_end leere Endbytes</b> eingestellt.
473            Die eingestellte Rotation des Lochstreifens wird durch das folgende Bild verdeutlicht:</p>
474            <img src='$dir_url/design/$alignment.png' alt='$alignment'>
475            <p>Die Größe des Lochstreifens wurde von der Dimension <b>$dsrc</b> abhängig gemacht und auf
476            <b>$size</b> eingestellt.</p>";
477
478$report .= "<h3>Generierung</h3>";
479
480$report .= "<p>Mit dem Kommandozeilentool führ(t)en folgende <b>Parameter</b> zu der Generierung eines derart
481            gewünschten Lochstreifens:
482            <br><tt>$exec_params</tt>
483            <br>Durch Eingabe dieser Parameter mit den oben angezeigten Eingabedaten müsste jederzeit
484            das gleiche Bild reproduzierbar sein.</p>";
485
486$report .= "<!-- STDOUT:\n$stdout\n\nSTDERR:\n$stderr\n\n-->"; // debugging...
487
488$report .= "<p>Das Generieren des Lochstreifens nahm die folgende <b>Zeit in Anspruch</b>:<pre>$stderr</pre>
489            <p>Dabei steht <i>real</i> für die wirklich vergangene Zeit, die der Benutzer warten musste,
490            bevor er seinen Lochstreifen bekam, <i>user</i> für die tatsächliche Zeit, die das Programm
491            aktiv war (Abweichungen zu <i>real</i> können dadurch begründet sein, dass der Server noch
492            andere Sachen gleichzeit machte) und <i>system</i> für die Zeit, in der der Server wirklich
493            ernsthaft über den Lochstreifen nachgedacht hat ;-)</p>";
494
495//// REPORT zuende. Jetzt erst mal ausdrucken.
496
497if(!$verbose) echo "fertig</p>\n"; // als Antwort auf die "wird nun generiert..."-Ausgaben weit oben.
498echo "<p>Mit dem generierten Bild wurde eine Urkunde erstellt, in der alle Parameter, Daten und sonstige
499         interessante Dinge festgehalten sind. Es folgt nur dessen Inhalt:</p>";
500
501echo "<div class='big-okay' style='font-weight:normal'>"; // ;)
502echo $report;
503echo "</div>";
504
505echo "<p>Diese \"Urkunde\" wurde mit dem Bild zusammen gespeichert. Sie ist unter einer ähnlichen Adresse
506      wie das Bild erreichbar, und zwar unter <b><a href=\"$report_url\">$report_url</a></b>.</p>";
507
508echo "<p>Möchten sie noch etwas stanzen? <a href='$dir_url'>Erneut zum Stanzereingabeformular</a></p>";
509
510// und jetzt abspeichern!
511$fh = fopen($report_file, 'w');
512
513if(!$fh) {
514    print '<p class="big-error">Fehler: Konnte Report-File '.$report_file.' nicht zum Schreiben öffnen!</p>';
515    exit; // weil gibts ja nichts mehr zu tun.
516}
517
518fwrite($fh, makeHeader("Lochstreifen $output_hash -- Erstellungsbericht"));
519fwrite($fh, "<h2>Lochstreifen $output_hash</h2>");
520fwrite($fh, $report);
521fwrite($fh, "</body></html>");
522
523fclose($fh);
524
525// so, jetzt aber wirklich fertig. :)
526
527function DataSizeFormat($size,$ukb = "1024",$plain = "")
528{
529    // immer wieder eine schöne Funktion, die man sich von seinen
530    // alten Scripten immer wieder neu kopiert ;-)
531    $kb = $ukb;        // Kilobyte
532    $mb = $ukb * $kb;  // Megabyte
533    $gb = $ukb * $mb;  // Gigabyte
534    $tb = $ukb * $gb;  // Terabyte
535    $sp = '&nbsp;';    // No breaking space
536
537    if($size < $kb) {
538        $readable = $size;
539        $definition = $sp.'Byte';
540    }elseif($size < $mb) {
541        $readable = ($size/$kb);
542        $definition = $sp.'KB';
543    }elseif($size < $gb) {
544        $readable = ($size/$mb);
545        $definition = $sp.'MB';
546    }elseif($size < $tb) {
547        $readable = ($size/$gb);
548        $definition = $sp.'GB';
549    }else {
550        $readable = ($size/$tb);
551        $definition = $sp.'TB';
552    }
553    if ($plain == 1) {
554        $definition = "";
555    }
556    if ($size < $kb) {
557        if (empty($readable)) {
558            $readable = 0;
559        }
560        return $readable.$definition;
561    } else {
562        return number_format($readable,2).$definition;
563    }
564}
565
Note: See TracBrowser for help on using the repository browser.
© 2008 - 2013 technikum29 • Sven Köppel • Some rights reserved
Powered by Trac
Expect where otherwise noted, content on this site is licensed under a Creative Commons 3.0 License