Hallo.
Ich stelle im Moment ein sehr merkwürdiges Verhalten in einem Skript fest, das ich mir absolut nicht erklären kann.
Es geht um ein Unterschriften-System für den Erhalt von Ware (ähnlich DHL&Co.) auf Basis von PHP/JavaScript/AJAX.
Dabei nutze ich die Zeichenfunktionalität von CANVAS: Ich erstelle ein Canvas-Objekt, auf dem der Empfänger unterschreibt.
Man klickt auf einen Button und über AJAX wird das Bild mit der Unterschrift gespeichert.
Danach wird mit location.href zu einem Skript weitergeleitet, das einen Lieferschein als PDF erstellt. Als Krönchen möchte ich, dass das Bild mit der Unterschrift direkt auf dem Lieferschein eingefügt wird.
Prinzipiell funktioniert alles einwandfrei. In 8 von 10 Fällen läuft das Skript absolut perfekt.
In den anderen 2 Fällen kann es zu 2 verschiedenen Fehlern kommen:
1.
Das Bild mit der Unterschrift wird nicht gespeichert. Ich habe hierfür noch keine Erklärung, denn das Speichern über das AJAX-Skript erfolgt innerhalb von 4 Zeilen, wo kein Fehler drin sein kann.
Ich denke eher, dass es am Browser (FF) liegt und dieser manche AJAX-Anweisungen nicht richtig ausführt.
Wie dem auch sei. Problematischer finde ich den zweiten Fall.
2.
Das Bild ist zwar da, aber trotzdem gibt is_file() anscheinend FALSE zurück.
Ich arbeite bereits mit sleep(), um der Speicherung Zeit zu geben, die Datei "in Ruhe" abzulegen. Doch auch damit hatte ich keinen 100%igen Erfolg.
Um ganz sicher zu gehen, dass die Speicherung Zeit genug hat, habe ich folgendes geschrieben:
Also: Solange die Datei nicht da ist und nicht min. 10 Sekunden vergangen sind, soll 1 Sekunde gewartet werden. Die 10-Sekunden-Grenze habe ich gesetzt, falls der oben genannte 1. Fehlerfall eintritt und die JPG wirklich nicht geschrieben wurde.
Nun müsste man doch annehmen, dass es lediglich 2 Möglichkeiten gibt, wie das Skript beendet wird: Entweder rennt das Skript ins die() mit der Fehlermeldung "Zeit abgelaufen!" oder der Lieferschein wird erstellt.
Und nun wird's freaky.
Manchmal endet das Skript mit der Fehlermeldung "Bild ist nicht da!"!
Wie kann das sein? Hinter die WHILE-Schleife kommt das Skript doch nur, wenn entweder die Datei da ist oder die 10-Sekunden-Grenze überschritten wurde.
Ist die Datei da, kann der Lieferschein erstellt werden. Wurden die 10 Sekunden überschritten, muss das Skript mit "Zeit abgelaufen!" enden.
Ich erspare mir nun erst einmal das Posten des Quellcodes, da dieser in einem großen Projekt steckt und ich erst die relevanten Stellen herauskopieren und "lesbar" machen müsste, was ziemlich viel Arbeit ist.
Vielleicht hat ja jetzt schon jemand eine Idee, wo der Fehler (oder wo mein Fehler?) liegt.
Danke im Voraus.
cya
Ich stelle im Moment ein sehr merkwürdiges Verhalten in einem Skript fest, das ich mir absolut nicht erklären kann.
Es geht um ein Unterschriften-System für den Erhalt von Ware (ähnlich DHL&Co.) auf Basis von PHP/JavaScript/AJAX.
Dabei nutze ich die Zeichenfunktionalität von CANVAS: Ich erstelle ein Canvas-Objekt, auf dem der Empfänger unterschreibt.
Man klickt auf einen Button und über AJAX wird das Bild mit der Unterschrift gespeichert.
Danach wird mit location.href zu einem Skript weitergeleitet, das einen Lieferschein als PDF erstellt. Als Krönchen möchte ich, dass das Bild mit der Unterschrift direkt auf dem Lieferschein eingefügt wird.
Prinzipiell funktioniert alles einwandfrei. In 8 von 10 Fällen läuft das Skript absolut perfekt.
In den anderen 2 Fällen kann es zu 2 verschiedenen Fehlern kommen:
1.
Das Bild mit der Unterschrift wird nicht gespeichert. Ich habe hierfür noch keine Erklärung, denn das Speichern über das AJAX-Skript erfolgt innerhalb von 4 Zeilen, wo kein Fehler drin sein kann.
Ich denke eher, dass es am Browser (FF) liegt und dieser manche AJAX-Anweisungen nicht richtig ausführt.
Wie dem auch sei. Problematischer finde ich den zweiten Fall.
2.
Das Bild ist zwar da, aber trotzdem gibt is_file() anscheinend FALSE zurück.
Ich arbeite bereits mit sleep(), um der Speicherung Zeit zu geben, die Datei "in Ruhe" abzulegen. Doch auch damit hatte ich keinen 100%igen Erfolg.
Um ganz sicher zu gehen, dass die Speicherung Zeit genug hat, habe ich folgendes geschrieben:
Code:
$timer_s = time(); while ( (!is_file("unterschrift.jpg")) && (time() < ($timer_s+10)) ) { sleep (1); } if (time() > ($timer_s+10)) { die ("Zeit abgelaufen!"); } if (is_file("unterschrift.jpg")) { // Lieferschein schreiben } else { die ("Bild ist nicht da!"); }
Nun müsste man doch annehmen, dass es lediglich 2 Möglichkeiten gibt, wie das Skript beendet wird: Entweder rennt das Skript ins die() mit der Fehlermeldung "Zeit abgelaufen!" oder der Lieferschein wird erstellt.
Und nun wird's freaky.
Manchmal endet das Skript mit der Fehlermeldung "Bild ist nicht da!"!
Wie kann das sein? Hinter die WHILE-Schleife kommt das Skript doch nur, wenn entweder die Datei da ist oder die 10-Sekunden-Grenze überschritten wurde.
Ist die Datei da, kann der Lieferschein erstellt werden. Wurden die 10 Sekunden überschritten, muss das Skript mit "Zeit abgelaufen!" enden.
Ich erspare mir nun erst einmal das Posten des Quellcodes, da dieser in einem großen Projekt steckt und ich erst die relevanten Stellen herauskopieren und "lesbar" machen müsste, was ziemlich viel Arbeit ist.
Vielleicht hat ja jetzt schon jemand eine Idee, wo der Fehler (oder wo mein Fehler?) liegt.
Danke im Voraus.
cya
Kommentar