Php

Liebe/-r Experte/-in,

ich erstelle in einem PHP-Script mit fpdf ein pdf.
Weil vorher schon andere Header gesendet wurden, lasse ich das PDF in einem Iframe berechnen und übergebe ihm dazu ein paar Parameter:
?>

jetzt ist es so dass das ursprünglich nicht so vorgesehen war. In der Datei rechnung_pdf.php wird eine Textvariable namens $otext angelegt, die die Ergebnisdaten im Textformat enthält.
Die kriege ich natürlich nicht mehr von dem Iframe in die das Iframe aufrufende Datei zurück, wo ich sie aber bräuchte.
Meine Lösung: Speichere String in Textdatei auf Platte und lies ein:

// otext wird als Textdatei in der rechnung_pdf.php gespeichert und muss hier ausgelesen werden :frowning:
$textpfad = „rechnungen/rechnung_“.$renr.".txt";
$h = fopen ($textpfad, „r“);
$otext = fread ($h, filesize ($textpfad));
fclose ($h);

Die PDF-Datei wird ordnungsgemäß erstellt. Die Textdatei auch, aber beim Einlesen erhalte ich immer den Fehler folgender Art:

Warning: fopen(rechnungen/rechnung_10050.txt) [function.fopen]: failed to open stream: No such file or directory in /var/www/web110434/html/markus/shop1/danke.php on line 51

ich habs auch schon mit ./rechnungen … probiert, aber gleiches Ergebnis.

Dann hab ich die Funktion mal ausgelagert:

$textpfad = „./rechnungen/rechnung_10044.txt“;
$h = fopen ($textpfad, „r“);
$otext = fread ($h, filesize ($textpfad));
echo nl2br($otext);
fclose ($h);
?>

funktioniert wunderbar.

Warum aber funktionierts oben nicht? Ich habe den schlimmen Verdacht, dass die Datei im Iframe noch nicht „fertig“ - noch nicht erstellt ist, wenn die Leseroutine greift. Kann das sein? Wie umgehe ich dieses Problem und was verursacht es?

Danke.

Kann auch sein dass ich irgendeine Kleinigkeit übersehen habe, aber ich finds einfach nicht.

Hallo,

Ihr Problem ist nicht ungewöhnlich. Selber habe auch schon mit PDF´s gearbeitet, aber dann ließ ich den Spaß mit JS ausgeben lassen.
Und PHP ist eine Serverseitige Sprache, so dass keine Probleme bei Speichertimings auftauchen sollten.
Falls aber doch, können sie es einfach mal Prüfen.

if (file_exists($textpfad)) {
echo „Ist fertig!“;
} else {
echo „Ist nicht fertig“;
}

zum $textpfad = „rechnungen/rechnung_“.$renr.".txt";
geht auch:
$textpfad = „rechnungen/rechnung_$renr.txt“;
So verliert man nich so schnell die Übersicht wegen den ganzen sonderzeichen.
oder:
$textpfad = „rechnungen/rechnung_“
$textpfad .= $renr;
$textpfad .= „.txt“;

Wenn solche Probleme auftauchen kann ich wirklich nur eine Datenbank empfehlen. Einfach mal nach Tutorials googlen.

Ich hoffe dass ich helfen konnte und wünsche noch viel Spaß mit PHP.

Hi,

wenn ich das richtig verstehe, wird die textdatei von dem pdf-skript generiert. Dieses script wird aber in dem iframe erst geladen (=serverseitig ausgeführt), nachdem dein hautpscript schon fertig ist. deshalb kann es auch die textdatei nicht finden.

eine alternative wäre, die PDF datei vom hauptscript aus zu generieren und das iframe laden zu lassen.

oder, falls die pdf datei klein genug ist, eine dada:// url als quelle zu setzen. hab das allerdings nicht getestet.

grüße
Benjamin

hab mich etwas undeutlich ausgedrückt.

also ich meinte, dass das hauptscript die textdatei nicht finden kann, weil sie erst vom iframe-script erzeugt wird, und das nachdem das hauptscript schon fertig ist.

und natürlich muss es data:// heißen.

Hallo Markus,

das Ganze (inkl. IFrame Lösung) hört sich nach einer ziemlichen Krücke an - nicht bös gemeint …

Empfehle Dir die Ausgaben des PDFs in gleicher Datei in die Ausgabepufferung zu schreiben. Dann gibt es auch keine Probleme mit zu früh gesendeten Headern.

Bei PHP siehe: http://de.php.net/manual/de/function.ob-start.php

Gruss Jacob

Hallo Markus,

also zu Deiner WWW-Anfrage kann ich Dir jetzt auch nur sagen, was Du wahrscheinlich selber weißt.
Ich mach das trotzdem mal, denn sicher kann ich da ja nicht sein:

Also die Fehlermeldung hat ja eine ganz klare Aussage: „No such file or directory“
Es gibt die Datei bzw. das Verzeichnis gar nicht.

Was mir aufgefallen ist, ist, dass in funktionierenden Aufruf und in dem, der nicht funktioniert, andere Rechnungsnummern aufgeführt sind. 10050 (funktioniert nicht) und 10044 (funktioniert).
Also das erhärtet ja den Verdacht, dass deine Funktion an und für sich richtig arbeitet, dass es aber einfach tatsächlich die Datei nicht gibt.

Das ist erst mal alles, was ich dazu sagen kann. Um mehr zu sagen müsste ich da selber auch tiefer drinstecken.

Generell empfehle ich zur Fehlerjagt, dass Du deine Funktion mal Schritt für Schritt zerlegst, jede Variable die du darin erzeugst mit einem echo ausgibst und Dir ansiehst ob dort alles richtig ist.
Vielleicht mal die Variable „Rechnungsnummer“ weglassen und erst mal mit einem fixen Namen probieren.
Eben Schritt für Schritt herantasten.
Das hilft bei mir am besten.

Ich hoffe, ich konnte wenigstens ein wenig helfen.

Gruß
Matthias