+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 5 su 5

Leggere solo alcuni file di una cartella

  1. #1
    L'avatar di ciro83
    ciro83 non è in linea Novello
    Ciao a tutti [img]smileys/smiley1.gif[/img]

    poniamo che ho una serie di record in una tabella del database. Ognuno di essi naturalmente ha la sua id e ognuno ha una serie di immagini associato (ID_001, ID002, ID_003, ecc.).

    Vorrei, che una volta che ho messo tutte le immagini di tutti i record, vengano selezionate solo quelle del record preso in considerazione.

    Es. Sto visualizzando il record n.31; allora apro la directory dei file e seleziono tutte le immagini il cui nome inizi per 31 e le pubblico sul monitor.

    Attualmente lo script che uso per leggere i file è il seguente:

    //*************** Variabili da settare ***************//
    //Percorso relativo della cartella contenente le immagini
    $cartella="../img/testata/foto/";
    //Array di tutte le estensioni valide che si vogliono caricare (bmp,gif,jpg,png)
    $estensioni=array('gif','jpg','bmp');
    //***************************************************//
    
    
    $dir=opendir($cartella) or die("Attenzione, impossibile aprire la cartella ".$cartella);
    $immagini=array();
    $misure=array();
    while(false !== ($file=readdir($dir))) {
      for($i=0;$i<count($estensioni);$i++){
     
      $estensione=substr($file,(strl en($file)-3),strlen($file));
      if(in_array($estensione,$esten sioni)){
       $immagini[]=$file;
       $misure[]=getimagesize($cartella.$file);
      }
     
      }
    }
    
    Questo però me li legge tutti; io, come ho detto, vorrei distinguerli in base al nome.
    Come posso modificarlo?
    ℹ️ Leggi di più su ciro83 ...

  2. #2
    L'avatar di madDbert
    madDbert non è in linea Novello
    Ciao,

    se ho capito bene quanto hai già implementato, potresti risolvere il problema in questo modo: prima del ciclo for in cui verifichi l'estensione del file dovresti inserire un if tramite cui verifichi se il nome del file inizia con l'id del record, se sì esegui il for, altrimenti non fai nulla.

    Es.
    while(...){
    $len_substr = strlen($ID)+1;
    $sub_filename = substr($file,0,$len_substr);
    if(strcmp($ID."_", $sub_filename)==0){
    for(...)...
    }else{
    #file non associato all'id
    }
    }

    Dovrebbe funzionare (ho scritto al volo in controllo quindi non garantisco dato che non l'ho testato).

  3. #3
    L'avatar di ciro83
    ciro83 non è in linea Novello
    Ciao, grazie per la risposta [img]smileys/smiley1.gif[/img]
    hai risolto il problema [img]smileys/smiley32.gif[/img]

    Ho modificato un po' il codice ed eccolo qua completo
    // Percorso relativo della cartella contenente le immagini 
    $cartella = "../disco/img/small/"; 
    //Array di tutte le estensioni valide che si vogliono caricare (bmp,gif,jpg,png) 
    $estensioni = array('gif','jpg','bmp'); 
    // imposto il contatore per le immagini uguale a uno dato che le immagini partono da uno
    $c = 1;
    
    // apro la cartella
    $dir = opendir($cartella);
    
    while(false !== ($file=readdir($dir))) {
      $len_substr = strlen($id)+1;
      $sub_filename = substr($file,0,$len_substr);
      if (strcmp($id."_", $sub_filename)==0){
      
      for($i=1;   $i<count($estensioni); $i++){
         $estensione=substr($file,(strlen($file)-3),strlen($file));
        }
      
      //   pubblico l'immagine
      echo   "<img src=\"".$cartella."".$id."_".$c.".".$estensione."\"> ";
      
      //   incremento il contatore per le immagini
      $c++;
     
      }
    }
    
    Mi spieghi, giusto per capire, cosa ti calcoli con queste tre operazioni:

    strlen($id)+1
    
    substr($file,0,$len_substr)
    
    strcmp($id."_", $sub_filename)
    
    Grazie ancora per l'aiuto [img]smileys/smiley32.gif[/img] [img]smileys/smiley32.gif[/img]
    ℹ️ Leggi di più su ciro83 ...

  4. #4
    L'avatar di madDbert
    madDbert non è in linea Novello
    Bene

    Certo che ti spiego i 3 passaggi.

    Premessa: a priori so che tutti i nomi dei file associati all'id iniziano con "id_", perciò al fine di identificare i file corretti devo recuperare la parte iniziale di ogni nome e confrontarla con l'id stesso a cui accodo l'underscore.

    Ma la lunghezza di questa porzione di stringa non è sempre uguale perché non so da quante cifre sia composto l'id, quindi...

    strlen($id)+1: ottiene la lunghezza dell'id più l'underscore.

    substr($file,0,$len_substr): preleva, partendo dal primo carattere, la porzione di nome che è necessario confrontare con l'id.

    strcmp($id."_", $sub_filename): verifica che le due stringhe coincidano.

    Precisazione: comprendo l'underscore per evitare l'errore di pubblicare immagini che abbiano la prima parte della sequenza di id concidente con l'id considerato. Faccio un esempio che è meglio:
    $id = 12;
    senza confrontare con "_" verrebbero considerati oltre a 12_001, 12_002, ecc. anche i file: 121_001, 129_003, 1234_002, ecc.

    Spero di aver risolto ogni tuo dubbio

  5. #5
    L'avatar di ciro83
    ciro83 non è in linea Novello
    Non posso che ringraziarti nuovamente [img]smileys/smiley1.gif[/img]

    Ciao, Ciro
    ℹ️ Leggi di più su ciro83 ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 0
    Ultimo Post: 07-09-2020, 08:07
  2. Risposte: 5
    Ultimo Post: 04-03-2015, 19:57
  3. XML leggere solo alcuni campi
    Da skiokk nel forum Visual Basic .Net
    Risposte: 4
    Ultimo Post: 20-04-2007, 21:08
  4. inviare solo alcuni file
    Da Vabene nel forum Visual Basic 6
    Risposte: 9
    Ultimo Post: 19-07-2006, 13:37
  5. leggere file di una cartella
    Da ketto85 nel forum Microsoft Word
    Risposte: 1
    Ultimo Post: 06-11-2005, 18:47