Script für Zufallsbild an PHP8 anpassen

cliodriver

Mitglied
Hallo wieder mal

ich nutze schon länger ein selbst zusammen gefrickeltes Script für eine Zufallsbildanzeige. Die Bilder liegen in mehreren Unterordner. Leider wird das Script in PHP8 so nicht funktionieren (bereits getestet)

eventuell sieht hier jemand beim drüberlesen schon an was es liegt?

PHP:
<?php
function getFiles($dir)
{
    static $files;
   
    $allowed_file_extensions = array();
    $allowed_file_extensions[] = 'gif';
    $allowed_file_extensions[] = 'bmp';
    $allowed_file_extensions[] = 'jpg';
    $allowed_file_extensions[] = 'jpeg';
    $allowed_file_extensions[] = 'png';
    $allowed_file_extensions[] = 'GIF';
    $allowed_file_extensions[] = 'BMP';
    $allowed_file_extensions[] = 'JPG';
    $allowed_file_extensions[] = 'JPEG';
    $allowed_file_extensions[] = 'PNG';    
   
    $len = strlen($dir);
    if($dir{$len-1} == '/')
        $dir = substr($dir, 0, $len-1);
       
   
    if(!is_dir($dir))
        return false;
       
    $open = @opendir($dir);
   
    if(!$open)
        return false;
   
    while($file = readdir($open)) {        
        if($file == "." || $file == "..")    
            continue;
       
        if(is_dir($dir.'/'.$file)) {
            getFiles($dir.'/'.$file);
        }    
           
        $e = explode('.', $file);
        $ext = $e[ count($e)-1 ];
       
        if( is_file($dir.'/'.$file) && in_array($ext, $allowed_file_extensions) ) {
            $files[] = $dir.'/'.$file;
        }
    }
    return $files;
}

$files = getFiles('projekte');
$rand = mt_rand(0, count($files)-1);

$image = $files[$rand];

list($files[$rand],$rest) = explode('/Bilder', $files[$rand]);

echo "<a href='index.php?page=bilder.php&imagepath=$files[$rand]/Bilder' title='$files[$rand]'><img class='image' src='$image' alt='$files[$rand]' width='198px'></a>";

?>
 
Zuletzt bearbeitet:

basti1012

Erfahrenes Mitglied
Wenn ich Zeile 19 ändere und Zeile 54 auskommentiere, geht es bei mir.
Aber was anderes.
Code:
 $open = @opendir($dir);
Dieses @ Zeichen solltest du dir nicht angewöhnen.
Fehler lassen sich eigentlich immer ohne das @ Zeichen beheben
PHP 8 unterstützt das auch nur noch bedingt , deswegen @ Löschen und wenn mehr Fehler kommen versuchen die Fehler zu beheben.
 

cliodriver

Mitglied
Das @ hab ich mal entfernt, funktioniert trotzdem nicht ab PHP8

keine Fehlermeldung
das Script wird gleich am Anfang abgebrochen, sprich ab der ersten Zeile

für weitere Nachforschungen hatte ich leider noch keine Zeit.
 

cliodriver

Mitglied
ich habe jetzt die Zeilen 19-20 ausgeblendet, nun funktioniert es wieder.

PHP:
    //if($dir{$len-1} == '/')
    //    $dir = substr($dir, 0, $len-1);
 

cliodriver

Mitglied
so, der Fehler liegt an der Zeile 18

PHP:
$len = strlen($dir);

diese gibt nicht wie gewünscht die Anzahl der Zeichen in der Zeichenkette (Pfad) zurück, sondern die Anzahl der Bytes.

Damit können die Zeilen 19-20 nicht arbeiten.

Das Script kommt aber auch ohne Zeilen 18-20 aus.