.
*
**/
// Konstanten:
$draw_program = "../visualisator/binary";
// Ausgabeordner (ohne trailing slash)
$output_dir = "temp";
// mit Verbose-Switch wird der Programmaufruf verbose.
$verbose = isset($_GET['verbose']) || isset($_POST['verbose']);
$ajax = isset($_GET['ajax']); // ajax-antwort oder normale Webseite anzeigen?
if(!$ajax)
echo makeHeader('Lochstreifenvisualisierung online');
function makeHeader($title) {
// als Funktion wg. Report-Datei, die später noch generiert wird.
return << '.$text." Dieser Fehler wäre nicht aufgetreten, hätten sie das Formular benutzt. '.$error." '.$error." Gehen sie zurück zum Formular und korrigieren sie ihre Fehleingaben.
Klicken sie dann nochmals auf Generieren. Es sind Probleme aufgetaucht, die allerdings nicht wirklich schlimm sind, der
Lochstreifen wurde trotzdem generiert: '.$error." Der Lochstreifen wird nun generiert...\n";
flush(); // damit er das wenigstens sieht...
if($verbose) {
print " Alles zusammengepanscht ergibt: Rufe auf...\n";
}
// in PHP brauchts nen mörderischen Aufwand, um jetzt dieses
// Programm anzuschmeißen:
$proc_ressource = proc_open("time $draw_program ".($verbose?'--verbose ':' ').$exec_params, array(
// descriptor array (0=stdin, 1=stdout, 2=stderr, like sh)
0 => array('pipe', 'r'), // Programm wird von STDIN lesen
1 => array('pipe', 'w'), // und zu STDOUT schreiben
2 => array('pipe', 'w'), // und zu STDERR auch schreiben
), $pipes, NULL , NULL );
if(is_resource($proc_ressource)) {
if($input_source != 'file') {
// Daten reinschreiben
fwrite($pipes[0], $input_binary);
}
fclose($pipes[0]); // nichts mehr zu schreiben
// STDOUT/STDERR lesen
$stdout = stream_get_contents($pipes[1]);
$stderr = stream_get_contents($pipes[2]); // fuer Speicherung der Fehler: Generator wurde nicht ordnungsgemäß ausgeführt, das
Programm beendete mit Statuscode $return_value. Folgende Ausgaben wurden zwecks Fehlersuche abgefangen: Aufruf: $draw_program $exec_params";
}
print " Gewünschtes Bild konnte nicht erstellt werden! Konnte Generatorprozess nicht starten! Der folgende Lochstreifen wurde am ".date('m.d.Y')." um ".date('H:i:s')." Uhr von dem
Besucher mit der IP-Adresse $_SERVER[REMOTE_ADDR] generiert. Die erstellte Datei vom
Typ ".strtoupper($format)." ist $filesize groß";
if($format == 'png') {
$imagesize = GetImageSize($image_filename);
$report .= ", sie hat die Ausmaße von $imagesize[0] x $imagesize[1] Pixel. Das Bild wurde gespeichert unter der Adresse $image_url
und kann z.B. zur Weiterverwendung runtergeladen werden. Es sieht so aus: Das Bild wurde unter der Adresse $image_url gespeichert.
Mit einem modernen Browser (Nicht Internet Explorer) können sie sich die SVG-Datei durch
Anklicken des Linkes anschauen. Laden sie sich (ansonten) die Datei runter und öffnen sie
es mit einem Vektorgrafikprogramm, z.B. mit dem frei erhältlichen Inkscape. Bitte beachten sie: Die Verfügbarkeit des Bildes auf diesem Server gehört nicht in den
\"Dienstleistungsumfang\" des Generierungsprogramms. Das heißt, dass sie durch Eingeben ihrer
Daten zugestimmt haben, dass diese mit dem Bild nach freiem Ermessen des Administrators gespeichert
werden und willkürlich gelöscht werden können. Es besteht kein Anspruch auf selbst zeitlich
begrenztes Hosting! Wenn sie das Bild im Internet verfügbar machen wollen, können sie es z.B.
auf kostenlosen Bilderhostern hochladen. Suchen sie dazu mit der Suchmaschine ihres Vertrauens
nach so etwas wie z.B. \"image hosting\" Die Daten, die dem generierten Lochstreifen zugrundeliegen, wurden vom Benutzer
$report_input_source[$input_source]. Im folgenden wird ein Hexdump der ".strlen($input_binary)."
Bytes angegeben, mit denen letztendlich der Lochstreifen generiert wurde. Mit geeigneten
Hilfmitteln (z.B. einem Hexeditor) können sie aus den Daten eine Binärdatei erstellen.";
$report .= " Außerdem wurden $empty_start leere Startbytes und $empty_end leere Endbytes eingestellt.
Die eingestellte Rotation des Lochstreifens wird durch das folgende Bild verdeutlicht: Die Größe des Lochstreifens wurde von der Dimension $dsrc abhängig gemacht und auf
$size eingestellt. Mit dem Kommandozeilentool führ(t)en folgende Parameter zu der Generierung eines derart
gewünschten Lochstreifens:
Das Generieren des Lochstreifens nahm die folgende Zeit in Anspruch: Dabei steht real für die wirklich vergangene Zeit, die der Benutzer warten musste,
bevor er seinen Lochstreifen bekam, user für die tatsächliche Zeit, die das Programm
aktiv war (Abweichungen zu real können dadurch begründet sein, dass der Server noch
andere Sachen gleichzeit machte) und system für die Zeit, in der der Server wirklich
ernsthaft über den Lochstreifen nachgedacht hat ;-)technikum29.de interne Projekte:Lochstreifenprojekt: Visualisierung
HERE;
}
/*
* Übersicht über POST-Parameter, die entgegen genommen werden:
*'data-src' = file|input|font
-> file => 'data-file' (dateiupload)
-> form => 'data-form' = hex[0]|oct|bin|dec
'data-input' = auf Länge checken und format
-> font => 'data-text' = auf gute Zeichen checken ([a-zA-Z0-9 ])
*'format' = PNG|SVG
*'dimension-src' = width|height|diameter
-> width => dimension-width
-> height => dimension-height jeweils auf int checken
-> diameter => dimension-diameter
*'alignment' => hor-[rtl|ltr]-[l|r] | ver-[btt|ttb]-[u|o]
komponenten = imagebg|tapebg|punched|notpunched|feedholes
*'show-'+[komponenten] (nur toggle an/aus)
*'color-'+[komponenten] => #RRGGBB
*'lucency-'+[komponenten] => AA
*'empty-start', 'empty-end' => int
*/
if(empty($_POST)) {
// so einfach ist das.
print 'Parameter fehlen
';
exit; // ;)
}
function get($var) {
// kleine Helperfunktion
return isset($_POST[$var]) ? $_POST[$var] : false;
}
function my_ctype_digit($string) {
// meine Implementierung dieser netten Funkion
return preg_match('/^[0-9]+$/', $string);
}
// Sofort tötende Fehler. Anzuwenden bei brutalen Fehlern, die nicht
// auf Fehleingabe im Formular berufen (Angriffsgefahr)
function print_fatal($text) {
print "Falsche Benutzung!
\n";
print 'Fehler in den angegeben Daten
";
foreach($warnings as $error) {
print 'Lochstreifengenerator
';
if(!empty($warnings)) {
// es gibt Warnungen...
echo 'Verbose-Ausgaben
";
print "";
print "STDOUT:\n";
echo $stdout;
print "\nSTDERR:\n";
echo $stderr;
print "
";
print "\nReturn Value $return_value\n";
}
// checken ob was gemacht wurde.
if(!is_file($image_filename)) {
print "Die Daten
";
// Daten als HEX aufbereiten
if($input_source == 'file')
$input_binary = file_get_contents($input_filename);
$report_input_source = array(
'file' => "als eine Datei mit dem Namen $original_filename hochgeladen",
'input' => "$form-kodiert eingetippt",
'font' => "als zu generierende Schrift eingetippt, zugrunde lag der Text $text"
);
$report .= "";
for($x=0; $x
Generierung
";
$report .= "
$exec_params
Durch Eingabe dieser Parameter mit den oben angezeigten Eingabedaten müsste jederzeit
das gleiche Bild reproduzierbar sein.$stderr
Mit dem generierten Bild wurde eine Urkunde erstellt, in der alle Parameter, Daten und sonstige interessante Dinge festgehalten sind. Es folgt nur dessen Inhalt:
"; echo "Diese \"Urkunde\" wurde mit dem Bild zusammen gespeichert. Sie ist unter einer ähnlichen Adresse wie das Bild erreichbar, und zwar unter $report_url.
"; echo "Möchten sie noch etwas stanzen? Erneut zum Stanzereingabeformular
"; // und jetzt abspeichern! $fh = fopen($report_file, 'w'); if(!$fh) { print 'Fehler: Konnte Report-File '.$report_file.' nicht zum Schreiben öffnen!
'; exit; // weil gibts ja nichts mehr zu tun. } fwrite($fh, makeHeader("Lochstreifen $output_hash -- Erstellungsbericht")); fwrite($fh, "