Z.B. mal anfangen mit Parametern zu arbeiten:
files=1 bringt die Dateiliste und img=1 bringt Bild 1 aus dieser Liste
Verwendet wird das dann so:
<p style="text-align:center">
<img onerror="weiter('error')" src="/diaslider.html?img=1" alt="dia" id="dia" onLoad="window.setTimeout('weiter()',3000)">
</p>
<script>
function weiter(error){
    if( this.number == null) { this.number = 1 }
    var dia = document.getElementById('dia');
    this.number++;
    // Anhand der Dateiliste ergibt sich die Anzahl
    if(this.number > "32"){ this.number = 1 }
    if(error){
        this.number = 1;
        // alert('fange wieder von vorne an... ')
    }
    dia.src = '/diaslider.html?img='+this.number;
    dia.alt = this.number+'.jpeg';
}
Also in obenstehendem Beispiel wird nur die Anzahl der Bilder als Platzhalter in die JS Funktion eingebaut, damit das Teil dann schön rund läuft 😉
D.h., für die Auslieferung eines Bildes ist nur Parameter img=123 zuständig. Auf dem Server haben die Bilder den Originaldateinamen aber in JS haben die nur noch Nummern.
Mit dem img~Parameter greift sich der serverseitige Prozess das dem Index entsprechende Bild aus der Liste und liefert die dazugehörige Binary als Content-Type: image/jpeg.
Viel Erfolg.
PS:
# das nach PHP umzusetzen dürfte kein Problem sein
    if(my $nr = $self->param('img')){
        
        my $file = $self->{FILES}->[$nr - 1];
        
        my $fh = IO::File->new;
        $fh->open($file, O_BINARY|O_RDONLY) or die "$!\n";
        read($fh, my $bin, -s $fh);
        my $lastmod = $self->http_date((stat($fh))[9]);
        $fh->close;
        $self->header(
            "Last-Modified" => $lastmod,
            "Content-Type"  => "image/jpeg"
        );
        $self->{CONTENT} = $bin;
}
Und ohne Parameter schließlich baust Du mit PHP die Seite selbst auf.
 nicht angemeldet
 nicht angemeldet JürgenB
 JürgenB Henry
 Henry marctrix
 marctrix