echo $begrüßung;
echo "<a href=$monat/$file/index.html>$file</a><br>";
Was passiert bei folgendem Code?
echo '<a href='.$monat.'/'.$file.'/index.html>'.$file.'</a>';
Das gleiche. Der (href-)Attributwert endet am ersten Leerzeichen, solange er nicht in einfachen oder doppelten Anführungszeichen notiert wird. Und diese fehlen in beiden Code-Teilen.
Vielleicht hilft es, sich mal das Ergebnis anzusehen und sich nicht von PHP-Code verwirren zu lassen.
<a href=monat/pfad zu einer datei/index.html>pfad zu einer datei/index.html</a>
versus
<a href="monat/pfad zu einer datei/index.html">pfad zu einer datei/index.html</a>
Das Syntax-Highlighting zeigt den Fehler in der obigen Zeile sehr schön an.
Das Umkodieren der Leerzeichen in der URI zum Zwecke der Übertragung in einem HTTP-Kontext sollte der Browser von selbst können. An dieser Stelle (wir befinden uns im HTML-Kontext) ist nur eine HTML-gerechte Formatierung nötig (& => &).
echo "$verabschiedung $name";