Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Immagini random da cartelle e sottocartelle.

    Ciao a tutti, è il mio primo post qui!
    Ho questo codice per mostrare immagini random.
    Avrei bisogno che lo script trovasse anche le immagini nelle subdirectory all'infinito, cioè quando la cartella è impostata su banner/2 dovrebbe anche leggere banner/2/bis e banner/2/bis/ter.
    Non ho idea di come fare.
    Qualcuno riesce ad aiutarmi?

    codice:
    <?php
    
    /*	
    	You can also specify the image to display like this:
    	
    	Set $folder to the full path to the location of your images.
    	For example: $folder = '/user/me/example.com/images/';
    	If the rotate.php file will be in the same folder as your
    	images then you should leave it set to $folder = '.';*/
    
    // random number 1 - 100
    $result_random=rand(1, 100);
    
    // if result less than or equal 70, display ad 1 (70%)
    if($result_random<=70){
    	$folder = 'banner/1/';
    }
    
    // if result less than or equal 90, display ad 2 (20%)
    elseif($result_random<=90){
    	$folder = 'banner/2/';
    }
    
    // if result less than or equal 100, display ad 3 (10%)
    elseif($result_random<=100){
    	$folder = 'banner/2/bis/';
    }
    
    // OK
    
        $extList = array();
    	$extList['gif'] = 'image/gif';
    	$extList['jpg'] = 'image/jpeg';
    	$extList['jpeg'] = 'image/jpeg';
    	$extList['png'] = 'image/png';
    	
    // --------------------- END CONFIGURATION -----------------------
    
    $img = null;
    
    if (substr($folder,-1) != '/') {
    	$folder = $folder.'/';
    }
    
    if (isset($_GET['img'])) {
    	$imageInfo = pathinfo($_GET['img']);
    	if (
    	    isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
            file_exists( $folder.$imageInfo['basename'] )
        ) {
    		$img = $folder.$imageInfo['basename'];
    	}
    } else {
    	$fileList = array();
    	$handle = opendir($folder);
    	while ( false !== ( $file = readdir($handle) ) ) {
    		$file_info = pathinfo($file);
    		if (
    		    isset( $extList[ strtolower( $file_info['extension'] ) ] )
    		) {
    			$fileList[] = $file;
    		}
    	}
    	closedir($handle);
    
    	if (count($fileList) > 0) {
    		$imageNumber = time() % count($fileList);
    		$img = $folder.$fileList[$imageNumber];
    	}
    }
    
    if ($img!=null) {
    	$imageInfo = pathinfo($img);
    	$contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
    	header ($contentType);
    	readfile($img);
    } else {
    	if ( function_exists('imagecreate') ) {
    		header ("Content-type: image/png");
    		$im = @imagecreate (100, 100)
    		    or die ("Cannot initialize new GD image stream");
    		$background_color = imagecolorallocate ($im, 255, 255, 255);
    		$text_color = imagecolorallocate ($im, 0,0,0);
    		imagestring ($im, 2, 5, 5,  "IMAGE ERROR", $text_color);
    		imagepng ($im);
    		imagedestroy($im);
    	}
    }
    
    ?>

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    Io costruirei un array con tutte le immagini che sono presenti nelle cartelle / sottocartelle
    E poi farei un rand sul count dell'array.


    Per costruire il suddetto array devi usare la ricorsione

    Questo è un esempio http://lixlpixel.org/recursive_funct...irectory_scan/

  3. #3
    Grazie mille andreamk,
    ci sto provando ma non ne vengo a capo, ho capito che la magia deve avvenire in questo punto del mio script:

    codice:
    	$fileList = array();
    	$handle = opendir($folder);
    	while ( false !== ( $file = readdir($handle) ) ) {
    		$file_info = pathinfo($file);
    		if (
    		    isset( $extList[ strtolower( $file_info['extension'] ) ] )
    		) {
    			$fileList[] = $file;
    		}
    che combacia con una parte del codice che mi hai linkato

    codice:
    	$directory_list = opendir($directory);
    	while (FALSE !== ($file = readdir($directory_list)))
    ma poi non mi tornano i pezzi.
    Sono scarso. Qualcuno riesce a darmi la soluzione all'enigma, così avendola davanti finalmente capisco?

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    398
    devi fare una funzione che richiama se stessa senza non riesci a fare la ricorsione


    Codice PHP:
    function fileList$path ){ 
        
    $result = array();
        
    $ignore = array( '.''..' ); 
        
    $handle opendir($folder);
         
        while( 
    false !== ( $file readdir$handle ) ) ){ 
            if (
    in_array($file$ignore ) { continue; }
                
            if (
    is_dir ("$path/$file) ){ 
                    
                
    $tmpArray fileList("$path/$file");
                foreach (
    $tmpArray as $cFile) {
                      
    $result[] = $cFile;
                }
            } else {
                  
    $result[] = $path/$file;
            }
        }
        
    closedir($handle ); 
        return 
    $result;
    }


    $imgList fileList/* la cartella */ );

    $image $imgListrand(count($imgList) - 1)] 
    L'ho scritto direttamente qui non l'ho provato ma la teoria è questa

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.