Avatar billede sorenriis Nybegynder
07. november 2004 - 21:16 Der er 31 kommentarer og
1 løsning

Liste over filer på webserver

Jeg har lagt om længe fået lavet mig et stykke software som sender nogle filer (via ftp) til en webserver, hvor jeg har købt mig til noget webplads.

Alle disse filer vil jeg nu gerne, vha. et php-script, have listet op under hinanden (altså et scrip, som kan læse indholdet af et bibliotek på en webserver) - i alfabetisk rækkefølge.
Desuden skal det være sådan at man kan klikke på et link, hvorefter filen kan downloades.

Kan dette lade sig gøre?
Det skal laves sådan at når jeg tilføjer en ekstra fil via ftp, så kommer den automatisk på listen.
Avatar billede syvon Nybegynder
07. november 2004 - 21:23 #1
ved ikke om det er noget i denne stil du mener

http://www.sweetphp.com/nuke/modules.php?name=Script_Preview&script=3
Avatar billede sorenriis Nybegynder
07. november 2004 - 21:25 #2
Det er noget i den stil ja..
Men jeg vil gerne selv kode det.. Det skal ikke være specielt avanceret og desuden skal det passe ind i den hjemmeside, hvor det skal bruges.
Det kan godt være svært med et så omfangsrigt system som det der...
Avatar billede sorenriis Nybegynder
07. november 2004 - 21:27 #3
Findes der ikke en nogenlunde overskuelig måde at gøre det selv på?
Avatar billede syvon Nybegynder
07. november 2004 - 21:32 #4
ellers så er der en her der skulle være lidt nemmere at tilpasse

http://autoindex.sourceforge.net/
Avatar billede morteeart Nybegynder
07. november 2004 - 21:35 #5
kig på php.net/glob
Avatar billede hmortensen Nybegynder
07. november 2004 - 21:41 #6
Måske noget i den her retning:

<?php
$mappe = "filer/";
if ($handle = opendir($mappe)) {
$filer = array();
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          $filer[] = $file;
      }
  }
  closedir($handle);
}
sort($filer);
reset($filer);
foreach ($filer AS $val) {
    echo "<a href=\"".$mappe.$val."\">".$val."</a>";
}
?>
Avatar billede syvon Nybegynder
07. november 2004 - 21:42 #7
<?php
$dir = "./";

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          echo "filename: $file : filetype: " . filetype($dir . $file) . "\n <br>";
      }
      closedir($dh);
  }
}
?>
Avatar billede hmortensen Nybegynder
07. november 2004 - 22:04 #8
De er vel egentlig alfabetiseret med readdir :)
Avatar billede syvon Nybegynder
07. november 2004 - 22:14 #9
ja de er alfabetiseret med readdir
Avatar billede hmortensen Nybegynder
07. november 2004 - 22:35 #10
syvon, det er jo også sent :)

riis2002, skal der også kigges i undermapper ?
Avatar billede sorenriis Nybegynder
07. november 2004 - 23:56 #11
Nej.. kun det bibliotek jeg på forhånd bestemmer der skal kigges i.. Hvordan sætter jeg egentligt den korrekte adresse? jeg kan vel ikke bare skrive "filer/" - rammer jeg så den rigtige mappe på webserveren, hvis php-scriptet ligger i roden?
Avatar billede sorenriis Nybegynder
08. november 2004 - 00:10 #12
hmortensen < Kører jeg dit script får jeg følgende fejlmeddelelse:
Warning: opendir(gtr/): failed to open dir: No such file or directory in test.php on line 3
Warning: sort() expects parameter 1 to be array, null given in test.php on line 12
Warning: reset(): Passed variable is not an array or object in test.php on line 13
Warning: Invalid argument supplied for foreach() in test.php on line 14
Avatar billede sorenriis Nybegynder
08. november 2004 - 00:15 #13
glem det.. nu virker det... der var en fejl på deres server åbentbart.. biblioteket eksisterede nemlig, så jeg kunne ikke helt forstå det gik ned..

Men nu virker det altså igen..
Avatar billede sorenriis Nybegynder
08. november 2004 - 00:15 #14
hmortensen - kan det laves sådan at den også skriver størrelsen på filen+hvornår den er oprettet?
Avatar billede hmortensen Nybegynder
08. november 2004 - 06:36 #15
Nej, den alfabetisere dem faktisk ikke.

Nu er der filnavn, str, oprettelses dato, og sidst ændret dato:

<?php
function file_size_convert($filesize) {
    $sizetitles = array('B', 'KB', 'MB', 'GB', 'TB');
    $tmpcount = 0;
    while($filesize >= 1024 && $tmpcount < count($sizetitles)) {
        $filesize /= 1024;
        $tmpcount++;
    }
    return sprintf('%0.2f', $filesize) . ' ' . $sizetitles[$tmpcount];
}

$mappe = "filer/";
$filer = array();
if ($handle = opendir($mappe)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && !is_dir($file)) {
            $filer[]= $file;
        }
    }
    closedir($handle);
}

sort($filer);
reset($filer);
foreach ($filer AS $val) {
    $created = date("d-m-Y H:i:s", filemtime($val));
    $modified = date("d-m-Y H:i:s", filectime($val));
    $size = file_size_convert(filesize($mappe.$val));
    echo "<a href=\"".$mappe.$val."\">".$val."</a> - ".$size." - Oprettet: ".$created." - Ændret: ".$modified."<br />";
}
?>
Avatar billede sorenriis Nybegynder
08. november 2004 - 09:19 #16
Den klager over at der er en fejl i linje 26+27, som er disse linjer:
$modified = date("d-m-Y H:i:s", filectime($val));
$size = file_size_convert(filesize($mappe.$val));

Fejlen lyder:
Warning: filemtime(): Stat failed for 3.jpg (errno=2 - No such file or directory) in /customers/lvsr.org/lvsr.org/httpd.www/gtr/test.php on line 26
Warning: filectime(): Stat failed for 3.jpg (errno=2 - No such file or directory) in /customers/lvsr.org/lvsr.org/httpd.www/gtr/test.php on line 27

Den finder ellers fint filerne og skriver størrelse op.. Men mellem hver fil står ovenstående fejl.. Datoen er konstant "Oprettet: 01-01-1970 01:00:00 - Ændret: 01-01-1970 01:00:00"
Avatar billede sorenriis Nybegynder
08. november 2004 - 09:21 #17
Det er selvfølgelig i disse 2 linjer fejlen er:
    $created = date("d-m-Y H:i:s", filemtime($val));
    $modified = date("d-m-Y H:i:s", filectime($val));
Avatar billede hmortensen Nybegynder
08. november 2004 - 13:51 #18
Mig der havde glemt $mappe:
$created = date("d-m-Y H:i:s", filemtime($mappe.$val));
$modified = date("d-m-Y H:i:s", filectime($mappe.$val));
Avatar billede sorenriis Nybegynder
08. november 2004 - 20:09 #19
takker.. godt nok lidt offtopic men..
De filer som ligger i biblioteket er nogle svm-filer.. Dem åbner explorer bare som en tekstfil i et nyt vindue og så kan man gemme den som txt-fil.. Meget bøvlet...

Kan den ikke tvinges til at gemme den fil der står i linket med det samme?
Avatar billede hmortensen Nybegynder
08. november 2004 - 21:03 #20
Måske sådan her:

<?php
if (isset($_GET['dlfile'])) {
header('Content-Description: File Transfer');
header("Content-Type: application/octet-stream");
header('Content-Length: ' . filesize($_GET['dlfile']));
header('Content-Disposition: attachment; filename=' . basename($_GET['dlfile']));
readfile($_GET['dlfile']);
header("location: ".$_SERVER['PHP_SELF']);
exit;
}
function file_size_convert($filesize) {
    $sizetitles = array('B', 'KB', 'MB', 'GB', 'TB');
    $tmpcount = 0;
    while($filesize >= 1024 && $tmpcount < count($sizetitles)) {
        $filesize /= 1024;
        $tmpcount++;
    }
    return sprintf('%0.2f', $filesize) . ' ' . $sizetitles[$tmpcount];
}

$mappe = "filer/";
$filer = array();
if ($handle = opendir($mappe)) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != ".." && !is_dir($file)) {
            $filer[]= $file;
        }
    }
    closedir($handle);
}

sort($filer);
reset($filer);
foreach ($filer AS $val) {
    $created = date("d-m-Y H:i:s", filemtime($mappe.$val));
    $modified = date("d-m-Y H:i:s", filectime($mappe.$val));
    $size = file_size_convert(filesize($mappe.$val));
    echo "<a href=\"".$_SERVER['PHP_SELF']."?dlfile=".$mappe.$val."\">".$val."</a> - ".$size." - Oprettet: ".$created." - Ændret: ".$modified."<br />";
}
?>
Avatar billede sorenriis Nybegynder
08. november 2004 - 21:10 #21
scriptet er helt det samme? Bare med den lille tilføjelse i toppen?
Avatar billede hmortensen Nybegynder
08. november 2004 - 21:11 #22
Ja, og nu vil den tvinge filen til download
Avatar billede sorenriis Nybegynder
08. november 2004 - 21:11 #23
herligt.. tak.. du har vist fortjent lidt points;)
Avatar billede hmortensen Nybegynder
08. november 2004 - 21:12 #24
Virker det som det skal nu ?
Avatar billede sorenriis Nybegynder
08. november 2004 - 21:15 #25
Der var jeg for hurtig.. for det virker faktisk ikke:)
Den kommer med en "siden kan ikke vises"..
Avatar billede hmortensen Nybegynder
08. november 2004 - 21:16 #26
Når du har hentet en fil, eller når du bare indlæser den første gang ?
Avatar billede hmortensen Nybegynder
08. november 2004 - 21:22 #27
Jeg har lige testet det her, og det virker fint.

Har du kaldt en forkert fil ? :)
Avatar billede sorenriis Nybegynder
08. november 2004 - 21:23 #28
filen kan da ikke være forkert.. de findes jo via dit script:)
Roder lige lidt med det
Avatar billede sorenriis Nybegynder
08. november 2004 - 22:59 #29
Jeg kan ikke få det til at virke...:(

Du kan se det her: http://gtr.lvsr.org/setups.php
Forstår det ikke lige...
Avatar billede sorenriis Nybegynder
08. november 2004 - 23:06 #30
Den åbner kun de 2 øverste (den downloader dem ikke).. Den nederste går den ned på pga. apostroffen over "e"...
Avatar billede sorenriis Nybegynder
09. november 2004 - 00:37 #31
FIk det til at virke.. satte det "header" halløj op i toppen af php-dokumentet.. Nu tilsidesættes alle mine html koder bare. Hvad kan det skyldes? Rammen uden om tabellen er væk og det samme er overskriften..:S
Avatar billede sorenriis Nybegynder
09. november 2004 - 00:40 #32
Jeg fandt fejlen:)
Nu virker det... Tak for hjælpen..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester