Ane PHP dir 3

mikko. 29.03.04 14:43

Tiedostolistaus/upload

 Tekstiversio  Arvo: 6 (8 ääntä)  Äänestä: +  -
Elikkäs dirristä kolmosversio. Näytillä: http://irkki.org/piilo/

Ominaisuuksia:

  - Tiedostolistaus aakkosjärjestyksessä
  - Tiedoston tallennus web-käyttöliittymällä
  - Tallennukseen salasana taikka ei (konffissa true/false)
  - Skandit toimii, jopa linkeissä :P (äÄöÖåÅ)
  - Tiedostojen tallennus privaattihakemistoon
  - Tiettyjen tiedostotyyppien tallennuksen esto
  - jotain....


<?php

################################
#
#   Ane PHP dir versio 3
#
################################
#
#  Muuta hakupolku/kriteerit
#
#  Esim: Haetaan kaikki tiedostot siitä hakemistosta, jossa tämä tiedosto sijaitsee:
#  $haku = "*";
#
#  Esim 2: Haetaan /home/user/public_html -hakemistosta kaikki avi-tiedostot:
#  $haku = "/home/user/public_html/*.avi";
#

$haku = "tiedostot/*";

################################
#
#  Hakemisto, jonne tiedostot tallennetaan
#

$tallennushakemisto = "/home/anemin/public_html/tiedostot/";
$tallennushakemisto_yllapito = "/home/anemin/privaatti/";

################################
#
#  Salasanakysely päällä/pois -> TRUE/FALSE
#

$salasanakysely = TRUE;
$salasana = "salakala";

################################
#
#  Tunnetut tiedostotyypit
#

$tiedostotyypit = array(
"exe" => "Ohjelma",
"reg" => "Rekisteritiedosto",
"xls" => "Excel dokumentti",
"mrc" => "mIRC kooditiedosto",
"pdf" => "PDF dokumentti",
"doc" => "Tekstitiedosto",
"frm" => "Visual Basic",
"vbp" => "Visual Basic",
"vbw" => "Visual Basic",
"tcl" => "TCL kooditiedosto",
"bmp" => "Bittikarttatiedosto",
"html" => "HTML kooditiedosto",
"htm" => "HTML kooditiedosto",
"c" => "C kooditiedosto",
"cpp" => "C++ kooditiedosto",
"pas" => "Pascal kooditiedosto",
"jpg" => "JPG kuva",
"gif" => "GIF kuva",
"png" => "PNG kuva",
"avi" => "AVI video",
"mpg" => "MPG video",
"mp3" => "MP3 musiikkitiedosto",
"wav" => "wav äänitiedosto",
"mid" => "MID äänitiedosto",
"mpeg" => "MPEG video",
"txt" => "Tekstitiedosto",
"zip" => "ZIP pakattu",
"tar" => "TAR pakattu",             
"gz" => "Gunzip pakattu",             
"mov" => "MOV video",
"php" => "PHP tiedosto",
"php3" => "PHP tiedosto",
"php4" => "PHP tiedosto",
"phps" => "PHP lähdekoodi",
"css" => "CSS tyylitiedosto",
"bak" => "Varmuuskopio"
);

$kielletyt = array(
"php",
"php3",
"php4",
"php5",
"phtml",
"cgi",
"html",
"shtml"
);



################################
#
#  Tästä alaspäin ei tarvitse muuttaa mitään
#

  if(isset($_POST["submit"])) {
    foreach($kielletyt as $kielletty) {
      if (ereg("^(.*)\.$kielletty$", strtolower($tiedosto_name))) die("Tiedostotyypin ".htmlentities($kielletty)." lisääminen on kielletty.");
    }
    if($salasanakysely == TRUE && $_POST["salasana"] === $salasana || $salasanakysely == FALSE) {
      if ($_POST["inside"])
        $hakemisto = $tallennushakemisto_yllapito;
      else
        $hakemisto = $tallennushakemisto;
      move_uploaded_file($_FILES['tiedosto']['tmp_name'], $hakemisto.$_FILES['tiedosto']['name']) or die("Tiedosto oli liian suuri kopioitavaksi, polku on väärin tai sinulla ei ole oikeutta suorittaa toimintoa.");
      $valmis = TRUE;
    } else {
      print '<p align="center">Väärä salasana!</p>';
    }
  }

?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <title>Ane PHP dir 3.0</title>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <style type="text/css">
   <!--   
   
body {
    background-image: url("http://irkki.org/piilo/tausta.gif");
    font-family: verdana, arial;
    font-size: 12px;     
    font-weight: bold;
    color: black;
}

input {
    background-color: #d0e6f0;
    border-width: 1px;
    border-color: #18315A;
    border-style: solid;
    font-family: verdana, arial;
    color: black;
    font-size: 12px;
    font-weight: bold;
}

.teksti {
    font-size: 12px;
}

.valkoinen {
    font-size: 12px;
    color: white;
    font-weight: bold;
}

td.tumma {
    background-color: #1c8ac3;
    padding: 5px;
}

.ympari {
    background-color: #1c8ac3;
    padding: 5px;
    border-width: 1px;
    border-color: #18315A;
    border-style: solid;
}

a:link {
    font-size: 12px;
    color: black;
    font-weight: bold;
    text-decoration: none;
}

a:visited {
    font-size: 12px;
    color: gray;
    font-weight: bold;
    text-decoration: none;
}

a:hover {
    font-size: 12px;
    color: blue;
    font-weight: bold;
    text-decoration: none;
}

p {
    font-size: 12px;
    color: black;
}   

   -->   
  </style>
</head>
<body>
  <table class="ympari" align="center">
   <tr>
    <td>
     <form method="post" enctype="multipart/form-data" action="index.php">
      <span class="valkoinen">Tiedosto</span>
    </td>
    <td>       
      <input type="file" name="tiedosto" style="width: 168px">&nbsp;&nbsp;&nbsp;
      <input value="Lisää" name="submit" type="submit">
    </td>
   </tr>
<?php if($salasanakysely) print '
   <tr>
    <td>
     <span class="valkoinen">Salasana</span>
    </td>
    <td>
      <input type="password" name="salasana" style="width: 100px" value="salasana">
    </td>
   </tr>
'
; ?>
   <tr>
    <td colspan="2">
      <input type="checkbox" name="inside" value="inside">
      <span class="valkoinen">&nbsp;Vain ylläpitäjälle</span>
     </form>
    </td>
   </tr>
<?php if($valmis) print '
   <tr>
    <td colspan="2">
     <span class="valkoinen">Tiedosto '
.htmlentities($tiedosto_name).' tallennettu.</span>
    </td>
   </tr>
'
; ?>   
  </table>
  <br>
   
   
  <table align="center">
   <tr>
    <td class="tumma"><span class="valkoinen">Nimi</span></td>
    <td class="tumma" align="right" style="width: 80px"><span class="valkoinen">Koko</span></td>
    <td class="tumma" align="right" style="width: 100px"><span class="valkoinen">Tyyppi</span></td>
   </tr>
<?php

  foreach(glob($haku) as $tiedostot)  {
    if(!is_dir($tiedostot)) {
      $koko = filesize($tiedostot);
      $kokokoko+=$koko;
      if($koko >= 1024000) {
        $koko /= 1024000;
        $kokotyyppi = "M";
        $desimaali = 2;
      } else {
        $koko /= 1024;
        $kokotyyppi = "k";
        $desimaali = 0;
      }
      foreach($tiedostotyypit as $key => $tyyppi) {
        if (ereg("^(.*)\.$key$", strtolower($tiedostot))) $temp = $tyyppi;
      }
       
      $linkki = str_replace("ä", "%e4", $tiedostot);
      $linkki = str_replace("Ä", "%c4", $linkki);
      $linkki = str_replace("ö", "%f6", $linkki);
      $linkki = str_replace("Ö", "%d6", $linkki);
      $linkki = str_replace("å", "%e5", $linkki);
      $linkki = str_replace("Å", "%c5", $linkki);
      $linkki = str_replace(" ", "%20", $linkki);       
       
      print '
   <tr>
    <td><a href="'
.$linkki.'">'.htmlentities($tiedostot).'</a></td>
    <td align="right"><p>'
.round($koko, $desimaali).' '.$kokotyyppi.'</td>
    <td align="right"><p>'
.$temp.'</td>
   </tr>'
;
    }
  }
?>
   <tr>
    <td class="tumma"><span class="valkoinen">Yhteensä</span></td>
    <td class="tumma" align="right"><span class="valkoinen"><?php
     
  if($kokokoko >= 1024000) {
    $kokokoko /= 1024000;
    $kokotyyppi = "M";
    $desimaali = 2;
  } else {
    $kokokoko /= 1024;
    $kokotyyppi = "k";
    $desimaali = 0;
  }
     
  echo round($kokokoko, $desimaali)." ".$kokotyyppi;
     
?></span></td>
    <td class="tumma">&nbsp;</td>
   </tr>
  </table>
</body>
</html> 

bluebyte 14:55 29.3.04 
nojaa
Linkku 17:20 31.3.04 
Ihan toimiva
eis 23:06 3.4.04 
Hieno ulkoasu :)
Tuohonhan ei ole kovin vaikea lisätä sellaista, että tiedostokokoa, nimeä tai päiväystä klikkaamalla järjestää aina ko. arvon mukaan, ja tuplaklikkaamalla samat takaperin. Itselleni olen tehnyt moisen, mut se kyl näyttää paljon rumemmalta :P
Kaichu 15:38 17.7.04 
Toimii
kezzi 16:07 8.7.05 
nätti on, tuohon voisit vielä lisätä tiedoston poistamisen: unlink(filun_nimi);
editoitu: 21:38 29.6.06
spssystem 21:31 29.6.06 
Sanokaapas viisaampina, että kuinkas tähän voisi lisätä sellaisen toiminnon, jolla saisi piilotettu esim. tietyt tiedostotyypit listauksesta?
Ja kiitos kaikille jotka vain jaksavat väsätä toimivan patentin tähän.. :)

Niin, kuinkas tässä määritetään sallitun tiedoston koko?
ane 09:29 29.1.09 
Nimestä plussa!