Visualizzazione risultati 1 fino 13 di 13

Discussione: Aiuto con codice lista file

  1. #1
    Guest

    Predefinito Aiuto con codice lista file

    Salve, ho creato questo abbozzo di codice ftp, ma mi si presenta subito un errore: le immagini me le mostra una prima volta come immagine e una seconda come cartella. Come posso risolvere?

    Codice PHP:
    <?php
    if (!isset($patch)){
    $patch = "upload";
    }
    echo
    $patch . "<br><br>";
    ?>
    <table width="200" border="1">
    <?php
    foreach (glob ($patch . "/*.png") as $immagine) {
    $immagine = str_replace ($patch."/", "", $immagine);
    ?>
    <tr><td><img src="immagini/immagine.png" height="15" width="15" /><?php echo $immagine; ?></td></tr>
    <?php
    }
    foreach (
    glob ($patch . "/*.jpg") as $immagine) {
    $immagine = str_replace ($patch."/", "", $immagine);
    ?>
    <tr><td><img src="immagini/immagine.png" height="15" width="15" /><?php echo $immagine; ?></td></tr>
    <?php
    }
    foreach (
    glob ($patch . "/*.gif") as $immagine) {
    $immagine = str_replace ($patch."/", "", $immagine);
    ?>
    <tr><td><img src="immagini/immagine.png" height="15" width="15" /><?php echo $immagine; ?></td></tr>
    <?php
    }
    foreach (
    glob ($patch . "/*") as $cartella) {
    $cartella = str_replace ($patch."/", "", $cartella);
    ?>
    <tr><td><img src="immagini/cartella.png" height="15" width="15" /><?php echo $cartella; ?></td></tr>
    <?php
    }
    ?>
    </table>

  2. #2
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Semplicemente perchè glob('/*') restituisce sia i files che le cartelle, io ho pensato ad una soluzione simile:

    Codice PHP:
    <?php
    $all
    = glob('*'); // tutti files e cartelle
    $valid = array('gif', 'png', 'jpg'); // lista delle estensioni valide

    foreach($all as $file) {
    $ext = end(explode('.', $file));
    // $name = str_replace($path . '/', '', $file);

    if(is_dir($file)) {
    echo
    'cartella';
    } else if(
    in_array($ext, $valid)) {
    echo
    'file';
    }
    }
    ?>
    Adattala come meglio credi.
    Ultima modifica di javascripter : 25-07-2010 alle ore 15.33.11

  3. #3
    Guest

    Predefinito

    Grazie mille per l'aiuto, ma adesso viene il problema vero e proprio: come posso fare che al click su una cartellasi aggiorni la variabile $patch e divernti $patch . "/" . $nome_cartella?

    Questo è il mio attuale codice:

    Codice PHP:
    <?php
    if (!isset($patch)){
    $patch = "upload";
    }
    $all = glob($patch . '/*'); // tutti files e cartelle
    $img = array('gif', 'png', 'jpg'); // lista dei tipi di formato per immagine
    $doc = array('doc', 'xls', 'docx', 'pdf', 'ppt', 'pptx', 'xlsx'); // lista dei tipi di formato per documenti
    ?>
    <table width="200" border="1">
    <tr>
    <td><?php echo $patch; ?></td>
    </tr>
    </table>
    <br /><br />
    <table width="200" border="1">
    <?php
    foreach($all as $file) {
    $ext = end(explode('.', $file));
    echo
    "<tr><td>";
    if(
    is_dir($file)) {//se è una cartella
    echo '<img src="immagini/cartella.png" height="15" width="15"/>';
    } else if(
    in_array($ext, $img)) {//se è un immagine
    echo '<img src="immagini/immagine.png" height="15" width="15"/>';
    } else if(
    in_array($ext, $doc)) {//se è un documento
    echo '<img src="immagini/immagine.png" height="15" width="15"/>';
    }
    $file = str_replace($patch . "/", "", $file);
    echo
    $file;
    echo
    "</td></tr>";
    }
    ?>
    </table>

  4. #4
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Piccolo off-topic: credo che tu stia sbagliando parola, percorso si dice path, non patch.

    Detto questo, puoi sfruttare il parametro $_GET, con un link che punta alla stessa pagina ma con la query string ?path=$nome_cartella

    Codice PHP:
    $path = (isset($_GET['path']) && is_dir($_GET['path'])) ? $_GET['path'] : 'upload/';

    $all = glob($path . '*');
    // resto del codice, poi aggiungi il link dove stampi l'immagine della cartella
    Ultima modifica di javascripter : 25-07-2010 alle ore 20.02.39

  5. #5
    Guest

    Predefinito

    Grazie mille.. Un ultima cosa. Per mettere il tasto parent come posso fare? Per tasto parent intendo quello che ti fà tornare indietro.

  6. #6
    L'avatar di javascripter
    javascripter non è connesso Moderatore
    Data registrazione
    14-02-2010
    Messaggi
    1,114

    Predefinito

    Puoi usare explode('/', $path), così ottieni tutte le parti del percorso, rimuovi l'ultimo elemento e unisci tutti gli elementi.
    Codice PHP:
    <?php
    $path
    = (isset($_GET['path']) && is_dir($_GET['path'])) ? $_GET['path'] : 'upload';
    $parent = explode('/', $path);
    $len = count($parent);

    if(
    $len > 1) {
    unset(
    $parent[$len - 1]); // rimuove l'ultimo elemento
    }

    $parent = implode('/', $parent);

    $all = glob($path . '/*'); // tutti files e cartelle
    $img = array('gif', 'png', 'jpg'); // lista dei tipi di formato per immagine
    $doc = array('doc', 'xls', 'docx', 'pdf', 'ppt', 'pptx', 'xlsx'); // lista dei tipi di formato per documenti
    ?>
    <table width="200" border="1">
    <tr>
    <td><?php echo $path; ?></td>
    </tr>
    </table>
    <br /><br />
    <table width="200" border="1">
    <?php

    if($parent != $path) {
    echo
    '<tr><td><a href="?path=' . $parent . '">Parent</a></td></tr>';
    }

    foreach(
    $all as $file) {
    $ext = end(explode('.', $file));
    $name = str_replace($path . '/', '', $file);
    $line = false;

    if(
    is_dir($file)) {//se è una cartella
    $line = '<img src="immagini/cartella.png" height="15" width="15"/> <a href="?path=' . $path . '/' . $name . '">' . $name . '</a>';
    } else if(
    in_array($ext, $img)) {//se è un immagine
    $line = '<img src="immagini/immagine.png" height="15" width="15"/> ' . $name;
    } else if(
    in_array($ext, $doc)) {//se è un documento
    $line = '<img src="immagini/immagine.png" height="15" width="15"/> ' . $name;
    }

    if(
    $line) {
    echo
    '<tr><td>' . $line . '</td></tr>';
    }
    }
    ?>
    </table>
    Così, dovrebbe funzionare.

  7. #7
    Guest

    Predefinito

    Grazie mille, funziona. Ultima cosa: come posso fare per cancellare files e/o cartelle (con il loro contenuto)?

  8. #8
    Guest

  9. #9
    Guest

    Predefinito

    Grazie mille. E per spostare i files?

  10. #10
    Guest

    Predefinito

    copy() (e poi cancelli con unlink())
    Puoi provare anche con rename() :)

    Tutte le funzioni per gestire i file:
    http://www.php.net/manual/en/ref.filesystem.php
    Ultima modifica di comunitavirtuali : 27-07-2010 alle ore 14.17.30

  11. #11
    Guest

    Predefinito

    E questo per i file.. Ma per le cartelle cn il loro contenuto come faccio a spostarle?

  12. #12
    Guest

    Predefinito

    Uhm... direi che devi:
    -creare la nuova cartella
    -spostare dentro ad essa tutti i file
    -cancellare la vecchia (e ora vuota) cartella

    Non ho mai provato se con rename() funziona anche per le cartelle... puoi provare :)

  13. #13
    Guest

    Predefinito

    Ok, c'è un errore. Allora, praticamente io ho fatto uno script del genere: allora, ho uppato vari files su unca cartella "upload" all'interno del mio sito.

    Codice PHP:
    echo '<a href="index.php?pag=download&sposta='.$file.'"><img src="immagini/sposta.gif" height="15"/></a>';
    $file è il solito $file dello script che è in questo topic qualche articolo sopra, quindi la variabile
    $_GET['sposta'] conterrà il valore di $file. La variabile $path, invece, sarà "upload/il_percorso_elencato_dall'utente. Ma qualcosa non funziona, visto che il ile non viene spostato. Puoi dirmi l'errore?

    Codice PHP:
    if(isset($_GET['sposta'])){
    if (isset($_POST['path'])){
    $path = "upload/".$_POST['path'];
    $new = $_GET['sposta'];
    if (is_dir($path)){
    rename("/".$new, "/".$path."/");
    echo "Il file &egrave; stato spostato con successo da $new a $path!<br><br>";
    }else{
    echo "La directory immessa non &egrave; valida<br><br>";
    }
    }else{ ?>
    Digita la directory dove vuoi che venga spostato il file:<br /><br />
    <FORM ACTION="" METHOD="POST">
    <INPUT TYPE="text" NAME="path" value="<?php echo $_GET['path']; ?>">
    <INPUT TYPE="submit" VALUE="Vai">
    </FORM><br /><br />
    <?php
    }
    }

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •