echo $begrüßung;
die Bildausgabe mit Wasserzeichen im Hauptscript funktionierte einwandfrei.
Wenn "Hauptscript" ein HTML-Dokument ausgeliefert hat, dann kann sich darin kein Bild befunden haben. (Inline-Grafiken in HTML lassen wir mal wegen unpraktikabel außer acht.) Wenn du bei dessen Ausführen eine Datei angelegt hast, und diese in einem zweiten Request abgefragt hast, war das ein Konzeptfehler.
Erst durch die Auslagerung in die externe Scriptdatei (imgcr.php) wurde das Bild nicht mehr angezeigt.
Ebenfalls ist es einer, wenn Erzeugung und Auslieferung mit anschließender Beseitigung getrennte Schritte sind, solange nicht ein eindeutiger Bezug zwischen beiden Schritten hergestellt wurde und außerdem ein Aufräum-Mechanismus für die Beseitigung liegengebliebenen Datenmülls sorgt.
Schau dir doch mal genau an, wie die Bestandteile einer Webseite - also zumindest das was am Ende im Auge des Betrachters ein großes Bild ergibt - angefragt und beantwortet werden. Es gibt als erstes einen Request nach der "Hauptseite". Dieser wird abgearbeitet und danach vergisst der Webserver alles was damit zusammenhing. Das macht er bei jedem Request und das muss so sein, weil er die Ressourcen für andere Requests benötigt. Der Client analysiert den Inhalt und findet darin Verweise auf andere Dokumente, die er unmittelbar zur Darstellung der Seite benötigt. Beispielsweise sind das CSS-Dateien, Javascript-Dateien, Bild-Dateien, Flash- und anderes Zeug. Er kann bereits noch während er die Seite empfängt selbige analysieren und Requests nach den anderen Dateien anstoßen. Er kann aber auch warten bis die Seite vollständig ist und erst dann mit den einzubindenden Dingen weitermachen. Und er kann entscheiden, gar nichts nachzuladen. Zum einen, weil es es vielleicht schon im Cache hat, zum anderen, weil es ihm per Konfiguration verboten ist (z.B. Bilder nachzuladen). Außerdem können beliebig viele Client quasi zur gleichen Zeit deine "Hauptseite" anfordern und anschließend das Bild nachladen wollen. Requests nach Hauptseite und Bild kommen dann in ungeordneter Folge aus unterschiedlichen Richtungen.
Du must also aus Serversicht Requests grundsätzlich als völlig unabhängig voneinander betrachten. Es gibt weder eine Reihenfolge der Requests noch eine Garantie, dass sie überhaupt stattfinden. Erzeugung und Beseitigung von vorübergehenden Daten sollten deshalb immer in dem selben Request stattfinden. Und selbst da musst du noch aufpassen, dass mehrere gleichzeitig diese Datei abfragen können. Temporäre Dateinamen müssen sich voneinander unterscheiden, wenn sich nicht zwei Requests um die selbe Datei prügeln sollen. Oder es muss sichergestellt werden, dass der eine solange wartet bis der andere die Datei wieder freigegeben hat. Für temporäre Dateien siehe tempnam() und tmpfile(), für die Problematik des gleichzeitigen Zugriffs siehe Sperren von Dateien. Wenn du Daten über mehrere Requests hin benötigst, musst du es so einrichten, dass sie jeder Request immer wieder mitsendet oder sie geeignet auf dem Server festhalten (Stichwort: Session).
Wenn du nun das Prinzip verstanden hast, überprüfe bitte nochmal dein Konzept, ob es mit all den genannten Umständen zurecht kommt. Überlege dir auch, welche Daten du für welchen Request benötigst, wo sie her kommen und wie du sicherstellen kannst, dass sie eindeutig und ohne Zwischenfälle dahin kommen.
Mein Ansinnen war folgendes:
Das Bild sollte nur angezeigt, aber nicht auf dem Server gespeichert werden,da sich dadurch das Datenvolumen vervielfachen würde.
Dann leg Erzeugung und Beseitigung in einen einzigen Request. Sorge für einen Ausschluss von Beeinträchtigungen durch parallel laufende Requests.
echo "$verabschiedung $name";