Visualizzazione risultati 1 fino 13 di 13

Discussione: script visualizza file sul server

  1. #1
    Guest

    Predefinito script visualizza file sul server

    ciao a tutti
    sto provando a sistemare uno script che ho trovato e che dovrebbe gestire i file sul server come se fosse "esplora risorse", ovvero che visualizza i file nelle varie directory e li visualizza nella pagina web...

    il codice è il seguente
    Codice PHP:
    <?
    $host
    =$_SERVER['HTTP_HOST'];

    $startdir = 'file_folder';
    $showthumbnails = false;
    $showdirs = true;
    $forcedownloads = false;
    $hide = array(
    'function_upload.php',
    'readme.txt',
    'upload.php',
    'upper.php',
    'dlf',
    'public_html',
    'index.php',
    'Thumbs',
    '.htaccess',
    '.htpasswd'
    );
    $displayindex = false;
    $allowuploads = false;
    $overwrite = false;

    $indexfiles = array (
    'index.html',
    'index.htm',
    'default.htm',
    'default.html'
    );

    $filetypes = array (
    'png' => 'jpg.gif',
    'jpeg' => 'jpg.gif',
    'bmp' => 'jpg.gif',
    'jpg' => 'jpg.gif',
    'gif' => 'gif.gif',
    'zip' => 'archive.png',
    'rar' => 'archive.png',
    'exe' => 'exe.gif',
    'setup' => 'setup.gif',
    'txt' => 'text.png',
    'htm' => 'html.gif',
    'html' => 'html.gif',
    'php' => 'php.gif',
    'fla' => 'fla.gif',
    'swf' => 'swf.gif',
    'xls' => 'xls.gif',
    'doc' => 'doc.gif',
    'sig' => 'sig.gif',
    'fh10' => 'fh10.gif',
    'pdf' => 'pdf.gif',
    'psd' => 'psd.gif',
    'rm' => 'real.gif',
    'mpg' => 'video.gif',
    'mpeg' => 'video.gif',
    'mov' => 'video2.gif',
    'avi' => 'video.gif',
    'eps' => 'eps.gif',
    'gz' => 'archive.png',
    'asc' => 'sig.gif',
    );

    error_reporting(0);
    if(!
    function_exists('imagecreatetruecolor')) $showthumbnails = false;
    $leadon = $startdir;
    if(
    $leadon=='.') $leadon = '';
    if((
    substr($leadon, -1, 1)!='/') && $leadon!='') $leadon = $leadon . '/';
    $startdir = $leadon;

    if(
    $_GET['dir']) {
    //check this is okay.

    if(substr($_GET['dir'], -1, 1)!='/') {
    $_GET['dir'] = $_GET['dir'] . '/';
    }

    $dirok = true;
    $dirnames = split('/', $_GET['dir']);
    for(
    $di=0; $di<sizeof($dirnames); $di++) {

    if(
    $di<(sizeof($dirnames)-2)) {
    $dotdotdir = $dotdotdir . $dirnames[$di] . '/';
    }

    if(
    $dirnames[$di] == '..') {
    $dirok = false;
    }
    }

    if(
    substr($_GET['dir'], 0, 1)=='/') {
    $dirok = false;
    }

    if(
    $dirok) {
    $leadon = $leadon . $_GET['dir'];
    }
    }



    $opendir = $leadon;
    if(!
    $leadon) $opendir = '.';
    if(!
    file_exists($opendir)) {
    $opendir = '.';
    $leadon = $startdir;
    }

    clearstatcache();
    if (
    $handle = opendir($opendir)) {
    while (
    false !== ($file = readdir($handle))) {
    //first see if this file is required in the listing
    if ($file == "." || $file == "..") continue;
    $discard = false;
    for(
    $hi=0;$hi<sizeof($hide);$hi++) {
    if(
    strpos($file, $hide[$hi])!==false) {
    $discard = true;
    }
    }

    if(
    $discard) continue;
    if (@
    filetype($leadon.$file) == "dir") {
    if(!
    $showdirs) continue;

    $n++;
    if(
    $_GET['sort']=="date") {
    $key = @filemtime($leadon.$file) . ".$n";
    }
    else {
    $key = $n;
    }
    $dirs[$key] = $file . "/";
    }
    else {
    $n++;
    if(
    $_GET['sort']=="date") {
    $key = @filemtime($leadon.$file) . ".$n";
    }
    elseif(
    $_GET['sort']=="size") {
    $key = @filesize($leadon.$file) . ".$n";
    }
    else {
    $key = $n;
    }
    $files[$key] = $file;

    if(
    $displayindex) {
    if(
    in_array(strtolower($file), $indexfiles)) {
    header("Location: $file");
    die();
    }
    }
    }
    }
    closedir($handle);
    }

    //sort our files
    if($_GET['sort']=="date") {
    @
    ksort($dirs, SORT_NUMERIC);
    @
    ksort($files, SORT_NUMERIC);
    }
    elseif(
    $_GET['sort']=="size") {
    @
    natcasesort($dirs);
    @
    ksort($files, SORT_NUMERIC);
    }
    else {
    @
    natcasesort($dirs);
    @
    natcasesort($files);
    }

    //order correctly
    if($_GET['order']=="desc" && $_GET['sort']!="size") {$dirs = @array_reverse($dirs);}
    if(
    $_GET['order']=="desc") {$files = @array_reverse($files);}
    $dirs = @array_values($dirs); $files = @array_values($files);


    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Welcome to <? print $host; ?></title>
    <link rel="stylesheet" type="text/css" href="styles.css" />
    </head>
    <body>
    <div id="container">
    <h1>Area Riservata ai soli utenti autenticati</h1>
    <div id="breadcrumbs">
    <p>Qui potete trovare i file che:<br />
    <br />
    - Sono stati caricati sul server via FTP<br />
    - Avete caricato voi tramite il link sottostante<br />
    </p>
    <p><span class="style3">Per caricare altri file usate lo script di <a href="javascript:;" onclick="window.open('upload.php','','width=400,height=100,top=100,left=100,scrollbars=yes,status=no,resizable=yes')"><u>UPLOAD</u></a></p>
    </div>
    <div id="listingcontainer">
    <div id="listingheader">
    <div id="headerfile">File</div>
    <div id="headersize">Dimensione</div>
    <div id="headermodified">Ultima Modifica</div>
    </div>
    <div id="listing">
    <?
    $class
    = 'b';
    if(
    $dirok) {
    ?>
    <div><a href="<?=$dotdotdir;?>" class="<?=$class;?>"><img src="icon/dirup.png" alt="Folder" /><strong>..</strong> <em>-</em> <?=date ("M d Y h:i:s A", filemtime($dotdotdir));?></a></div>
    <?
    if($class=='b') $class='w';
    else
    $class = 'b';
    }
    $arsize = sizeof($dirs);
    for(
    $i=0;$i<$arsize;$i++) {
    ?>
    <div><a href="<?=$leadon.$dirs[$i];?>" class="<?=$class;?>"><img src="icon/folder.png" alt="<?=$dirs[$i];?>" /><strong><?=$dirs[$i];?></strong> <em>-</em> <?=date ("d M Y h:i:s A", filemtime($leadon.$dirs[$i]));?></a></div>
    <?
    if($class=='b') $class='w';
    else
    $class = 'b';
    }

    $arsize = sizeof($files);
    for(
    $i=0;$i<$arsize;$i++) {
    $icon = 'unknown.png';
    $ext = strtolower(substr($files[$i], strrpos($files[$i], '.')+1));
    $supportedimages = array('gif', 'png', 'jpeg', 'jpg');
    $thumb = '';

    if(
    $filetypes[$ext]) {
    $icon = $filetypes[$ext];
    }

    $filename = $files[$i];
    if(
    strlen($filename)>43) {
    $filename = substr($files[$i], 0, 40) . '...';
    }

    $fileurl = $leadon . $files[$i];
    ?>
    <div><a href="<?=$fileurl;?>" class="<?=$class;?>"<?=$thumb2;?>><img src="icon/<?=$icon;?>" alt="<?=$files[$i];?>" /><strong><?=$filename;?></strong> <em><?=round(filesize($leadon.$files[$i])/1024);?>KB</em> <?=date ("d M Y h:i:s A", filemtime($leadon.$files[$i]));?><?=$thumb;?></a></div>
    <?
    if($class=='b') $class='w';
    else
    $class = 'b';
    }
    ?></div>
    </div>
    </body>
    </html>
    lo script funziona perfettamente al 90%...
    mi manca un passaggio che non so come fare, voglio che se "entro" in una sottocartella mi visualizzi il contenuto di quella (al momento invece da errore perchè non ci trova dentro un index...)

    inoltre dentro la cartella dovrà poi visualizzare l'icona per tornare al livello superiore

    il pezzo di codice di questa seconda parte dovrebbe essere questo se non ho visto male
    Codice PHP:
    <div><a href="<?=$dotdotdir;?>" class="<?=$class;?>"><img src="icon/dirup.png" alt="Folder" /><strong>..</strong> <em>-</em> <?=date ("M d Y h:i:s A", filemtime($dotdotdir));?></a></div>
    attendo risposte speranzoso, grazie 1000 anticipatamente per l'aiuto

  2. #2
    Guest

    Predefinito

    Hai pensato di mettere questo script anche nelle sottocartelle? ;)


    Ciao!

  3. #3
    Guest

    Predefinito

    si ci ho pensato ed è quello che ho fatto in primis per ovviare al problema, ma:
    - per ogni cartella ci va una pagina di script, se le cartelle diventano tante è sbatti
    - ogni script nella sottocartella va modificato per farlo puntare alla pagina del css e alle immagini presenti nella cartella principale, nella radice
    - l'idea e poi di riuscire anche a sistemare lo script di upload facendogli leggere la cartella in cui e e quindi facendogli poi fare l'upload nella cartella da cui viene lanciato...

    mentre ero a sistemare la cucina ho pensati di provare a dirgli:
    se entri nella cartella XYZ cambia il valore di $leadon (o di $startdir, non ho ancora provato) con quella in cui sei entrato...

    dici che funzionerebbe?

  4. #4
    Guest

    Predefinito

    Lo dovresti adattare in modo che ti legga anche le sotto-cartelle..invece di fare un redirect!
    ciao! ^^

  5. #5
    Guest

    Predefinito

    Mah.. passa un parametro di tipo GET che rappresenta la directory sulla quela devi fare la scansione. A quel punto ti basta prelevare la directory (fare dei controlli ovviamente) e darla in pasto allo script.
    Questo è in piccolo quello che vorresti tu
    Codice PHP:
    <?php
    $array_file
    = array();

    $dir = (!empty($_GET['dir']))? $_GET['dir']:'./';

    $cartella = opendir($dir);

    while (
    false !== ($file = readdir($cartella))) {
    if(
    is_file($dir.$file))
    $array_file[$file]='file';
    elseif(
    is_dir($dir.$file))
    $array_file[$file]="dir";
    }
    closedir($cartella);

    foreach(
    $array_file as $k=>$v)
    if(
    $v!='dir')
    echo
    $k."<br>";
    else
    echo
    "<a href=\"?dir=".$dir.$k."/\">".$k."</a><br>";
    ?>
    Non esistono controlli e roba varia, è solo un esempio.

  6. #6
    Guest

    Predefinito

    allora il tuo codice funziona, ma ha 2 problemi:
    -1 visualizza tutte le cartelle, anche quelle "superiori" a dove è situato il file e anche quelle protette da password addirittura... (insomma fa vedere tutto il server..., ho visto anche il php.ini)
    -2 non posso vedere\scaricare i file...

    in ogni caso ho risolto modificando il mio script... appena finisco di sistemare le ultime cose lo carico zipato sul server e lo rendo disponibile :)

    ora ho un problemino sull'upload...

    è gestito dai seguenti file:

    upload.php:
    Codice PHP:
    <?
    // form html per upload dei file
    echo "
    <b>Selezione il file da caricare.</b><br>
    Dimensione massima consentita: <b>10Mb</b>
    <form method=post action=upper.php enctype=multipart/form-data>
    <input type=file name=upfile>
    <input type=submit>
    </form>
    "
    ;
    ?>

    upper.php:
    Codice PHP:
    <?
    include ("function_upload.php");

    $up_name = "upfile";
    $max_size = "10000000";
    $name_dir = ".";


    funz_uploader($up_name, $max_size, $name_dir);

    ?>
    function_upload.php:
    Codice PHP:
    <?
    #####################################################################################
    # Funzione per upload di file #
    # Creata da kandalf [kandalf@blu.it] 08/08/02 #
    # Le variabili da definire sono #
    # $up_name = nome del file che proviene dal form #
    # $max_size = la dimesione massima del file da caricare #
    # $name_dir = la directory dove caricare il file #
    # sembra essere scritta bene, no? speriamo...... #
    #####################################################################################

    function funz_uploader($up_name, $max_size, $name_dir) {


    $size = $_FILES[$up_name] ['size']; // controlla la dimensione dell'immagine
    $nome_img = $_FILES[$up_name] ['name']; // controlla il nome dell'immagine

    $split = explode(".",$nome_img); // verifica il tipo di estensione del file, controllando
    $estensione = array_pop($split); // le ultime letere dopo l'ultimo punto

    if (is_uploaded_file($_FILES[$up_name] ['tmp_name'])) { // controlla se il file è stato caricato dal form

    if ($size <= $max_size) {



    // sposta il file caricato
    @move_uploaded_file($_FILES[$up_name] ['tmp_name'], "$name_dir/$nome_img")
    or die (
    "Impossibile spostare il file.
    <A href=\"javascript:history.back()\">Torna indietro e riprova...</A>"
    );

    echo
    "File caricato con successo.<br>
    <A href=\"upload.php\">Carica un altro file.</A><br>"
    ; // se il file è stao caricato


    } else {

    echo
    "Questo file è troppo grande per essere caricato.<br>
    <A href=\"javascript:history.back()\">Torna indietro e riprova con uno piu piccolo.</A><br>"
    ; // se il file è troppo grande
    }
    } else {

    echo
    "Non riesco a caricare questo file sul server.<br>
    <A href=\"javascript:history.back()\">Torna indietro.</A><br>"
    ; // se non riesce a caricare il file
    }
    }
    ?>

    questo è il link che lo lancia (si trova in una pagina chiamata index.php:
    Codice PHP:
    <a href="javascript:;" onclick="window.open('upload.php','','width=400,height=100,top=100,left=100,scrollbars=yes,status=no,resizable=yes')"><u>UPLOAD</u></a>

    vorrei passare il valore contenuto nella variabile $leadon tra le pagine affinché si sostituisca a $name_dir (forse deve però essere aggiunto qualche slash di differenza tra le 2 (e anche questo non so come si fa...)

    altra cosa vorrei che una volta chiusa la finestrella di dialogo con la pagina function_upload.php si aggiorni in automatico la pagina index.php
    Ultima modifica di Razzo : 24-12-2008 alle ore 18.13.41

  7. #7
    Guest

    Predefinito

    (non riesco a modificare la risposta precedente)

    ho modificato la pagina di upload.php nel seguente modo:
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    <title>Upload</title>
    <link rel="stylesheet" type="text/css" href="styles.css" />
    </head>
    <body>
    <div id="up_container">
    <FORM ENCTYPE="multipart/form-data" ACTION="upload.php" METHOD="POST">
    File: <INPUT TYPE="file" NAME="userfile">
    <INPUT TYPE="submit" VALUE="Upload">
    </FORM><br>

    <?php


    $path
    = $_REQUEST['updir'];
    $max_size = 1000000;

    if (!isset(
    $HTTP_POST_FILES['userfile'])) exit;

    if (
    is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) {

    if (
    $HTTP_POST_FILES['userfile']['size']>$max_size)
    { echo
    "<span class=\"style3\">Il File è troppo grande per essere caricato!</span><br><A href=\"javascript:history.back()\"><h1>Torna indietro e riprova con uno piu piccolo...</h1></span></A>\n"; exit; }

    if ((
    $HTTP_POST_FILES['userfile']['name']!="index.html") || ($HTTP_POST_FILES['userfile']['name']!="imageupload") || ($HTTP_POST_FILES['userfile']['name']!="styles"))
    {

    if (
    file_exists($path . $HTTP_POST_FILES['userfile']['name']))
    { echo
    "<span class=\"style3\">Il file esiste di già!</span><br><A href=\"javascript:history.back()\"><h1>Torna indietro...</h1></A>\n"; exit; }

    $res = copy($HTTP_POST_FILES['userfile']['tmp_name'], $path .
    $HTTP_POST_FILES['userfile']['name']);
    if (!
    $res) { echo "<span class=\"style3\">upload fallito!</span><A href=\"javascript:history.back()\"><span class=\"style3\"><h1>Torna indietro.</h1></A>\n"; exit; }
    else { echo
    "<span class=\"style2\">File caricato con successo!!!</span><div id=\"listingcontainer\"><div id=\"listing\">\n"; }

    echo
    "Nome File: <b>".$HTTP_POST_FILES['userfile']['name']."</b><br>\n";
    echo
    "Dimensione: <b>".$HTTP_POST_FILES['userfile']['size']."</b> bytes<br>\n";
    echo
    "Tipo di File: <b>".$HTTP_POST_FILES['userfile']['type']."</b><br>\n";

    echo
    "</div></div><A href=\"upload.php\"><h1>Carica un altro file...</h1></A>\n";

    } else { echo
    "<span class=\"style3\">File non consentito!</span><A href=\"javascript:history.back()\"><span class=\"style3\"><h1>Torna indietro.</h1></A>\n"; exit; }

    }

    ?>

    </div></div>
    e viene sempre lanciata dalla pagina index con il seguente link:
    Codice PHP:
    <a href="javascript:;" onclick="window.open('upload.php?updir=<?=$leadon;?>','','width=400,height=220,top=100,left=100,scrollbars=yes,status=no,resizable=yes')"><u>UPLOAD</u></a>
    il problema che rimane è che non viene caricato nella cartella corretta 8quella visualizzata), ma sempre nella cartella principale, come posso sistemare?

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da Razzo
    -1 visualizza tutte le cartelle, anche quelle "superiori" a dove è situato il file e anche quelle protette da password addirittura... (insomma fa vedere tutto il server..., ho visto anche il php.ini)
    Veramente io vedo solo i miei files....
    Ho modificato lo script in modo che visualizzi un link a ciascun file.
    Codice PHP:
    <?php
    $array_file
    = array();

    $dir = (!empty($_GET['dir']))? $_GET['dir']:'./';

    $cartella = opendir($dir);

    while (
    false !== ($file = readdir($cartella))) {
    if(
    $file != ".." && $file != ".") {
    if(
    is_file($dir.$file))
    $array_file[$file]='file';
    elseif(
    is_dir($dir.$file))
    $array_file[$file]="dir";
    }
    }
    closedir($cartella);

    foreach(
    $array_file as $k=>$v)
    if(
    $v!='dir')
    echo
    "<a href=\"".$k."\">".$k."</a><br>";
    else
    echo
    "<a href=\"?dir=".$dir.$k."/\">".$k."</a><br>";
    ?>
    Per l'upload ti complichi la vita....
    Ecco un script funzionante:
    Codice PHP:
    <?php
    error_reporting
    ("E_ALL");
    if(isset(
    $_FILES['file'])) {
    $file = basename($_FILES['file']['name']);
    $dir = "uploaded/"; //sostituire
    if(!is_dir($dir)) {
    mkdir($dir);
    }
    $exts = array("jpg","gif"); //mettere le proprie estensioni
    $p = pathinfo($file);
    if(
    in_array($p['extension'], $exts)) {
    if(
    file_exists($dir.$file)) {
    echo
    "Esiste gi&agrave; un file con ".$file." come nome. Rinomina il tuo file e riprova";
    exit;
    } else {
    move_uploaded_file($_FILES['file']['tmp_name'], $dir.$file);
    }
    echo (
    is_uploaded_file($_FILES['file']['tmp_name'])) ? "Erroe nell'upload del file" : "Il link del tuo file &egrave;: <br><textarea cols=\"30\" rows =\"2\">http://tuonome.altervista.org/".$dir.$file."</textarea>"; //sostituire l'url
    }
    } else {
    ?>
    <form method="post" name="upload" action="" enctype="multipart/form-data">
    <label for="name">File: </label>
    <input type="file" name="file">&nbsp;&nbsp;<input type="submit" value="Upload">
    </form>
    <?php
    }
    ?>
    Ti ho messo dei commenti dove devi sostituire delle cose
    Ultima modifica di gabryhacker : 31-12-2008 alle ore 17.35.38

  9. #9
    Guest

    Predefinito

    tu hai messo ora " if($file != ".." && $file != ".") { "
    che non ti fa vedere i puntini per tornare alle cartelle precedenti, ma se invece gliele fai vedere puoi vedere anche quelle superiori a dove hai caricati il file

  10. #10
    Guest

    Predefinito

    Ho provato a clicccare, ma vedo solo i miei files.
    Leggi il mio edit

  11. #11
    Guest

    Predefinito

    anche sui 2 puntini (..) ?
    a me se clicco quelli va su di cartella fino a quella principale del sito

    e per quanto riguarda l'upload a me non funziona e in ogni caso guardando lo script mi pare che la cartella sia comunque fissa e che non cambia rispetto alla subdir in cui ti trovi...

  12. #12
    Guest

    Predefinito

    Lo script dell'upload l'ho testato e funziona.
    I due puntini (..) non ce li ho.
    Pagina di prova: Test
    Ultima modifica di gabryhacker : 01-01-2009 alle ore 13.22.47

  13. #13
    Guest

    Predefinito

    prova a mettere gli script in una sottodirectory e vedi cosa succede...
    Ultima modifica di Razzo : 01-01-2009 alle ore 18.18.34

Regole di scrittura

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