Scansione di file in una directory: non sono in ordine crescente. Come mai?

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Buongiorno a tutti.
Ho una directory sul server che contiene dei pdf il cui nome è numero.pdf.
Ho la necessità di mostrare l'elenco dei file per poterli scaricare.
I file si chiamano 367.pdf, 370.pdf, 376.pdf ecc. e l'ultimo è 402.pdf.
Nella directory li vedo elencati correttamente (367, 370, 376 e via fino al 402).
Quello che ottengo nella mia pagina invece risulta prima il 402 poi 367, 370, 376 eccetera.
Non capisco come mai.
Inoltre la scansione mi ritorna due righe vuote prima del 402.
Ecco la porzione di codice:
PHP:
 //Imposto la directory da leggere
    $directory = "../pdf/2015/dispense/";
    // Apriamo una directory e leggiamone il contenuto.
    if (is_dir($directory)) {
      //Apro l'oggetto directory
      if ($directory_handle = opendir($directory)) {
      //Scorro l'oggetto fino a quando non è termnato cioè false

        include 'connect.php';

        while (($file = readdir($directory_handle)) !== false) {
        //Se l'elemento trovato è diverso da una directory
        
        if((!is_dir($file))&($file!=".")&($file!=".."))
          $nome = basename($file,".pdf");

          $query = ("SELECT * FROM calendario WHERE id_lezione = '$nome'");
          $vai = mysql_query($query);
          $uno = mysql_fetch_assoc($vai);
          $titolo = $uno['titolo'];
          $giorno = $uno['giorno'];
          $mese = $uno['mese'];
          $anno = $uno['anno'];

          $data = $giorno."/".$mese."/".$anno;


        echo $nome . " - " . $data . " - " . "<a href='../pdf/2015/dispense/$file' target='_blank'>" . $titolo . "</a>" . "<br/>";
        }
      //Chiudo la lettura della directory
      closedir($directory_handle);
      }
    }
Non riesco a capire come mai intanto i file non siano nello stesso ordine di esposizione nella directory e poi come mai io ottenga due righe vuote...
Qualcuno ha qualche idea?
Grazie
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, la condizione è sbagliata : gli and si scrivono con il doppio &&, in più mancano le parentesi graffe per racchiudere il codice che deve essere eseguito.
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
ok, ma resta il fatto che, a parte il fatto che funziona correttamente e che ho corretto gli &&, resta il fatto che l'elenco che mi restituisce non è nello stesso ordine di ciò che vedo nella directory. I pdf sono dispense relative alle diverse lezioni che nel db sono identificate con un numero progressivo. Lo scopo è quello di ottenere un elenco non tanto dei file, ma delle lezioni corrispondenti, riportando data e titolo che ottengo dal db relativo. Va tutto bene, e non è gravissimo che non siano in ordine, almeno ora che sono poche. Quando saranno molte sarebbe meglio che venissero elencate nell'ordine corretto. E invece la 402 è sempre la prima, poi ricomincia con le altre nell'ordine giusto.
Comunque grazie per la correzione
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Dimenticavo... una volta a posto le parentesi, le due righe vuote sono scomparse. Per il resto tutto come prima.
la 402 è sempre la prima dispensa visualizzata...
Uffffff
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Per l'ordinamento dovresti creare un array ordinarlo con sort() e poi ciclarlo oppure utilizzare direttamente la funzione glob() che ti restituisce direttamente un array ordinato.
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
grazie. Non sapevo che glob restituisse direttamente un array ordinato.
Il fatto che sia già all'interno di un ciclo while? In pratica dovrei prima ottenere l'elenco in un array e poi stamparlo a video, mentre adesso stampo riga per riga all'interno di while. Giusto?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
glob ti restituisce un array, ma non ordinato, se con ordinato intendi es. con i valori dell'array ordinati in ordine alfabetico o numerico
considera poi che glob accetta i wildcard, esempio
PHP:
<?php
$percorso="tua_cartella/";// o es ="../tua_cartella/"
$file=glob($percorso."*.jpg");
//estrae tutti i file contenuti in tua_cartella con estenzione jpg
sort($file); //li ordina in ordine alfabetico crescente - rsort() inverso
//.....
?>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
il manuale dice
GLOB_NOSORT - Return files as they appear in the directory (no sorting). When this flag is not used, the pathnames are sorted alphabetically
però non ho testato l'ho presa per buona
 

gandalf1959

Utente Attivo
21 Nov 2013
208
1
18
Ottimo. Ora va tutto benissimo. E siccome alcune dispense non corrispondono al numero di nessuna lezione, ho aggiunto una piccola verifica sul nome, se è numerico fai una cosa, se no un'altra.
Ecco il codice completo:
PHP:
 //Imposto la directory da leggere
    $directory = "../pdf/2015/dispense/";
    //inizializzo l'array
    $numerini = array();
    // Apro una directory e leggo il contenuto.
    if (is_dir($directory)) {
      //Apro l'oggetto directory
      if ($directory_handle = opendir($directory)) {
      //Scorro l'oggetto fino a quando non è terminato cioè false

        while (($file = readdir($directory_handle)) !== false) {
        //Se l'elemento trovato è diverso da una directory
        
        if((!is_dir($file))&&($file!=".")&&($file!="..")) {

          $nom = basename($file,".pdf");
          $numerini[] .= $nom;
        }
      }

      asort($numerini);

      include 'connect.php';

      foreach ($numerini as $key => $nome) {
          $query = ("SELECT * FROM calendario WHERE id_lezione = '$nome'");
          $vai = mysql_query($query);
          $uno = mysql_fetch_assoc($vai);
          $titolo = $uno['titolo'];
          $giorno = $uno['giorno'];
          $mese = $uno['mese'];
          $anno = $uno['anno'];

          $data = $giorno."/".$mese."/".$anno;

          if (is_numeric($nome)) {
            $query = ("SELECT * FROM calendario WHERE id_lezione = '$nome'");
            $vai = mysql_query($query);
            $uno = mysql_fetch_assoc($vai);
            $titolo = $uno['titolo'];
            $giorno = $uno['giorno'];
            $mese = $uno['mese'];
            $anno = $uno['anno'];

            $data = $giorno."/".$mese."/".$anno;


            echo $nome . " - " . $data . " - " . "<a href='../pdf/2015/dispense/$file' target='_blank'>" . $titolo . "</a>" . "<br/>";
          }else{
            echo $nome . ": <a href='../pdf/2015/dispense/$file' target='_blank'>scarica</a><br>";
          }
          
          



        }
        }
      //Chiudo la lettura della directory
      closedir($directory_handle);
      }
E come sempre grazie per l'aiuto.
Alla prossima!
 
Discussioni simili
Autore Titolo Forum Risposte Data
filippino File robots.txt e frequenza di scansione googlebot SEO e Posizionamento 0
D Problema errori di scansione 404 SEO e Posizionamento 1
S Problema scansione all'avvio Windows e Software 2
A scansione di una Tabella del DB PHP 2
MarcoGrazia Strumenti di Webmaster: errori di scansione! Google Search Console 1
flavioweb Ultima scansione del sito da parte di google SEO e Posizionamento 2
D scansione ip automatica Reti LAN e Wireless 0
U scansione parole in una pagina Classic ASP 3
chika chan scansione scanner Linux e Software 0
C Rifare logo da una scansione help Webdesign e Grafica 15
T Come esportare Thunderbird MBOX in file PST di Outlook? Windows e Software 0
K File audio in html, chi mi può aiutare? HTML e CSS 0
K Aiuto con file audio in html HTML e CSS 1
Antonio67 Lanciare file shell bash da html HTML e CSS 2
G leggere file txt e stampare con php il contenuto a video PHP 7
L Modifica file upload in ASP Classic ASP 2
Cosina mostrare contenuto da file txt PHP 2
L PHPSpreadsheet inserire dati da file .xlsx/.xls su database PHP 2
M Inviare un file su un server remoto con JavaScript Javascript 0
L Ricezione dei dati su file php da modulo html PHP 6
X unire più file in un pdf Windows e Software 2
spider81man Creazione di un UNICA tabella da più file .CSV PHP 1
felino TV e pendrive USB: capacità massima e file system? Discussioni Varie 1
A invio massivo dati a file php Javascript 4
W visualizzare solo file html e sottocartelle di una cartella PHP 1
W Elenco dei link del file presenti in una cartella PHP 2
P Funzione jQuery Ajax invio file a php jQuery 1
S Download di un file in automatico dopo la sua creazione PHP 2
B ciclare file xml con PHP PHP 1
C copiare solo le vocali di un file in un'altro file PHP 2
F Funzione Glob - ricerca file contenente una parola PHP 1
L File CSV con app inventor da errore Sviluppo app per Android 2
zorro file PDF non visualizzo niente PHP 9
N Script elenco file HTML HTML e CSS 5
S Libreria PHP per creare file dwg o dxf PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
I eliminazione file pdf PHP 0
Cosina Cancellare una specifica email da un elenco in un file txt PHP 3
R Download file multipli da directory php PHP 0
Cosina Invio messaggio a mailing list su file txt PHP 9
J GIT: Tracciare file nati successivamente SOLO in produzione HTML e CSS 0
M File excel e LibreOffice PHP 0
N file manager da php 5 a 7 PHP 15
rebeca Come Unire file PST in Uno? Windows e Software 0
R Cercare un file all'interno della directory virtuale IIS PHP 3
T Come aprire file .wtb Discussioni Varie 10
A nome file che contiene punto passato come parametro a query PHP 31
M Visualizzare file PDF con link preso dal DB PHP 0
A recuperare data creazione di un file PHP 6
D File pdf che non si aprono .... PHP 1

Discussioni simili