Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310

    ordinare numericamente file in cartella

    gestisco una galleria, la modifica delle foto sono riuscito a farla correttamente, ma non riesco a gestire correttamente la cancellazione.

    Carico una pagina dove esiste una checkbox per ogni foto, al POST vengono cancellate le due versioni di ogni immagine (14_1.jpg e 14_1thumb.jpg, ad esempio) e fin qua tutto ok

    ipotizziamo di avere sei immagini per identificativo

    14_1.jpg
    14_1thumb.jpg
    14_2.jpg
    14_2thumb.jpg
    14_3.jpg
    14_3thumb.jpg
    14_4.jpg
    14_4thumb.jpg
    14_5.jpg
    14_5thumb.jpg
    14_6.jpg
    14_6thumb.jpg

    io cancello la 14_3.jpg, 14_3thumb.jpg, 14_5.jpg, 14_5thumb.jpg

    mi rimangono sulla cartella

    14_1.jpg
    14_1thumb.jpg
    14_2.jpg
    14_2thumb.jpg
    14_4.jpg
    14_4thumb.jpg
    14_6.jpg
    14_6thumb.jpg

    come rinominare queste rimanenti in

    14_1.jpg
    14_1thumb.jpg
    14_2.jpg
    14_2thumb.jpg
    14_3.jpg (vecchia 4)
    14_3thumb.jpg (vecchia 4thumb)
    14_4.jpg (vecchia 6)
    14_5thumb.jpg (vecchia 6thumb)

    come avevo fatto io non va bene perchè davo per scontato che le foto lette da una directory venissero lette nell'ordine numerico crescente, invece non è cosi
    sul mio locale è cosi, ma sul server vivo no, purtroppo

    qualche idea?
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  2. #2
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    per esempio, sul server le foto rimanenti vengono lette cosi (vedi allegato)
    Immagini allegate Immagini allegate
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  3. #3
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Non so come leggi il contenuto della cartella, ma provo lo stesso...
    Inanzitutto non rinominerei i file per evitare problemi con eventuali link verso gli stessi fatti in altre pagine.

    Prova ad usare la funzione scandir(): otterray un array ordinato che contiene tutti i nomi dei file e delle cartelle contenute.

    Tra gli esempi ci sono vari suggerimenti, forse qualcosa ti può essere utile.

  4. #4
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Originariamente inviato da clasku
    Non so come leggi il contenuto della cartella, ma provo lo stesso...
    Inanzitutto non rinominerei i file per evitare problemi con eventuali link verso gli stessi fatti in altre pagine.
    questo non è un problema, perchè i link alle immagini vengono fatti leggendo la cartella

    Originariamente inviato da clasku
    Prova ad usare la funzione scandir(): otterray un array ordinato che contiene tutti i nomi dei file e delle cartelle contenute.

    Tra gli esempi ci sono vari suggerimenti, forse qualcosa ti può essere utile.
    io leggevo la directory cosi

    Codice PHP:
    if ($read_directory opendir($directory))
    {
        while (
    $nomefiles readdir($read_directory))
        {
                 
    //mio codice di rinominazione
        
    }

    boh, proverò con scandir, vedò se mi ordina i file
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  5. #5
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    Codice PHP:
    <?php
    $scan 
    scandir("immagini/");
    echo 
    "<pre>"print_r($scan);
    ?>
    output

    Array
    (
    [0] => .
    [1] => ..
    [2] => 141_1.jpg
    [3] => 141_10.jpg
    [4] => 141_11.jpg
    [5] => 141_12.jpg
    [6] => 141_13.jpg
    [7] => 141_14.jpg
    [8] => 141_15.jpg
    [9] => 141_16.jpg
    [10] => 141_17.jpg
    [11] => 141_18.jpg
    [12] => 141_19.jpg
    [13] => 141_2.jpg
    [14] => 141_20.jpg
    [15] => 141_21.jpg
    [16] => 141_22.jpg
    [17] => 141_23.jpg
    [18] => 141_3.jpg
    [19] => 141_4.jpg
    [20] => 141_5.jpg
    [21] => 141_6.jpg
    [22] => 141_7.jpg
    [23] => 141_8.jpg
    [24] => 141_9.jpg
    )

    Codice PHP:
    <?php
    $directory 
    "immagini/";
    if (
    $read_directory opendir($directory))
    {
        while (
    $nomefiles readdir($read_directory))
        {
            
    $name_photo_from_directory 141;
            if (
    $nomefiles != "." && $nomefiles != ".." && $name_photo_from_directory==141)
            {                
                echo 
    "<pre>";print_r($nomefiles);
            }    
        }
    }
    ?>
    output

    141_1.jpg
    141_10.jpg
    141_11.jpg
    141_12.jpg
    141_13.jpg
    141_14.jpg
    141_15.jpg
    141_16.jpg
    141_17.jpg
    141_18.jpg
    141_19.jpg
    141_2.jpg
    141_20.jpg
    141_21.jpg
    141_22.jpg
    141_23.jpg
    141_3.jpg
    141_4.jpg
    141_5.jpg
    141_6.jpg
    141_7.jpg
    141_8.jpg
    141_9.jpg

    quindi non funziona neanche usando scan dir. Inoltre, con scan dir non posso caricare solo le foto per un determinato ID, quindi devo usare la mia funzione

    come cacchio lo ordino? :master:
    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prova rinominando i file in questo modo
    141_001.jpg
    141_010.jpg
    inserendo tutti gli zeri che pensi siano necessari... dovrebbe funzionare

    Se usi readdir() usa la sintassi che trovi nel primo esempio del manuale: riporto qui sotto
    Codice PHP:
    <?php
    // Note that !== did not exist until 4.0.0-RC2

    if ($handle opendir('/path/to/files')) {
        echo 
    "Directory handle: $handle\n";
        echo 
    "Files:\n";

        
    /* This is the correct way to loop over the directory. */
        
    while (false !== ($file readdir($handle))) {
            echo 
    "$file\n";
        }

        
    /* This is the WRONG way to loop over the directory. */
        
    while ($file readdir($handle)) {
            echo 
    "$file\n";
        }

        
    closedir($handle);
    }
    ?>

  7. #7
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il fatto è che nel nome del file tu puoi scrivere quello che vuoi, ma sempre l'ordine alfabetico verrà usato, non puoi specificare un altro tipo per il nome del file, quindi è ovvio che 14_10 venga prima di 14_2.

    La soluzione è nominare i file in questo modo: pensare all'ordine di grandezza massimo di foto che potranno essere contenute nella cartella (10, 100, 1000...) ed usare il numero massimo di zeri di cui è composto l'ordine di grandezza che hai scelto, ad esempio, se decidi che sia 1000

    14_000
    14_000thumb
    14_001
    14_001thumb
    14_002
    14_002thumb
    ...
    14_999
    14_999thumb

    questo formato, lo scandir te lo ordinerà come ti aspetteresti.
    Questo se il numero prima dell'underscore è fisso all'interno della cartella, altrimenti vale lo stesso discorso fatto per i numeri dopo, perché di nuovo 14_120 verrebbe prima di 2_001, ma dopo 02_001

    EDIT: praticamente lo stesso suggerimento che hai avuto qui su, stavamo postando contemporaneamente.

  8. #8
    Utente di HTML.it L'avatar di blekm
    Registrato dal
    Jun 2004
    Messaggi
    8,310
    sembra funzionare semplicemente usando natsort

    Codice PHP:
    $directory "immagini/";
    $nomi = array();
    if (
    $read_directory opendir($directory))
    {
        while (
    $nomefiles readdir($read_directory))
        {
            
    $name_photo_from_directory 141;
            if (
    $nomefiles != "." && $nomefiles != ".." && $name_photo_from_directory==141)
            {                
                
    $nomi[] = $nomefiles;
            }    
        }
    }

    echo 
    "<pre>";print_r($nomi);
    natsort($nomi);
    echo 
    "<pre>";print_r($nomi); 
    prima

    Codice PHP:
    Array
    (
        [
    0] => 141_1.jpg
        
    [1] => 141_10.jpg
        
    [2] => 141_11.jpg
        
    [3] => 141_12.jpg
        
    [4] => 141_13.jpg
        
    [5] => 141_14.jpg
        
    [6] => 141_15.jpg
        
    [7] => 141_16.jpg
        
    [8] => 141_17.jpg
        
    [9] => 141_18.jpg
        
    [10] => 141_19.jpg
        
    [11] => 141_2.jpg
        
    [12] => 141_20.jpg
        
    [13] => 141_21.jpg
        
    [14] => 141_22.jpg
        
    [15] => 141_23.jpg
        
    [16] => 141_3.jpg
        
    [17] => 141_4.jpg
        
    [18] => 141_5.jpg
        
    [19] => 141_6.jpg
        
    [20] => 141_7.jpg
        
    [21] => 141_8.jpg
        
    [22] => 141_9.jpg

    dopo

    Codice PHP:
    Array
    (
        [
    0] => 141_1.jpg
        
    [11] => 141_2.jpg
        
    [16] => 141_3.jpg
        
    [17] => 141_4.jpg
        
    [18] => 141_5.jpg
        
    [19] => 141_6.jpg
        
    [20] => 141_7.jpg
        
    [21] => 141_8.jpg
        
    [22] => 141_9.jpg
        
    [1] => 141_10.jpg
        
    [2] => 141_11.jpg
        
    [3] => 141_12.jpg
        
    [4] => 141_13.jpg
        
    [5] => 141_14.jpg
        
    [6] => 141_15.jpg
        
    [7] => 141_16.jpg
        
    [8] => 141_17.jpg
        
    [9] => 141_18.jpg
        
    [10] => 141_19.jpg
        
    [12] => 141_20.jpg
        
    [13] => 141_21.jpg
        
    [14] => 141_22.jpg
        
    [15] => 141_23.jpg

    Il portale sul turismo a Lucca

    Siti web Lucca

    Vendo Tex a colori di Repubblica (primi 100 numeri) - info in pvt.

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.