Alexander (HH): prüfen, ob Datei auf Webserver existiert

Beitrag lesen

Moin Moin!

es ist doch aber häufig so, dass ein (selbstgeschriebenes) "CMS" merkt, dass eine angeforderte Ressource nicht vorhanden ist. Wie soll man da reagieren?

Bitte mal mit möglichst wenig Ironie und sonstigen ablenkenden Stilmitteln:

Sinngemäß:

  
# Pseudocode-Perl-Mix, CGI-Environment:  
  
use CGI qw(...);  
  
# ...  
  
sub NotFound  
{  
    my $request=shift;  
    my $content;  
    eval {  
        $content=processTemplate(  
            'errors/not-found.template',  
            {  
                URI => $request->uri,  
            }  
        );  
    };  
    if ($@) {  
        warn "Processing errors/not-found.template: $@\n";  
        $content=join(  
            '',  
            start_html(  
                -title=>'404 Not Found',  
            ),  
            h1('404 Not Found'),  
            p(  
                'Could not find "',  
                escapeHTML($request->uri),  
                '". Additionally, an error was found while processing the "errors/not-found.template" file. See the web server\'s error log for details.'  
            ),  
            end_html(),  
        );  
    }  
    print  
        header(-status=>404),  
        $content;  
    exit;  
}  
  
# ...  
  
    if (resourceFound($request)) {  
        # ...  
    } else {  
        NotFound($request);  
    }  
  
# ...  
  

Das läßt sich natürlich noch verfeinern, z.B. mit Fehlermeldungen in der konfigurierten bzw. in der Session ausgewählten Sprache. Auch größere Katastrophen, die typischerweise in einem 500 enden, lassen sich mit einem eval { BLOCK } rund um das Script abfangen. (Wer auf Java steht, liest hier bitte try-catch.)

Wer einen DB-Ausfall genauer spezifizieren möchte, könnte in dem Fall z.B. mit Status "503 Service Unavailable" antworten statt mit "500 Internal Server Error".

Für Resourcen, die irgendwann mal existiert haben, aber unter der angeforderten URL auf absehbaree Zeit nicht wieder existieren werden, sollte man "410 Gone" statt "404 Not Found" liefern, wenn das CMS diese Information hat. Für eine Stellenausschreibung einer wieder besetzen Stelle wäre das beispielsweise sinnvoll.

Alexander

--
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".