webForumDet fria alternativet

Problem: Lista filer i mapp

10 svar · 622 visningar · startad av Dryden

DrydenMedlem sedan aug. 200218 625 inlägg
#1

Har lite problem med ett php-script som jag själv inte har skrivit. ;)
Det hela går ut på att lista filerna i en mapp, som dir alltså, och sedan att dessa filer i webbläsaren blir klickbara länkar.

Så här ser det ut idag:

<?
$visa=opendir("mappnamn");
	while($fil=readdir($visa)){
		if(!($fil=="."||$fil=="..")){
		echo "<a href=$fil>$fil</a>";
		}
	}
closedir($visa);
?>

Filerna listas och länkas. Så långt korrekt men länkningen blir fel där mappnamnet försvinner ur länken.
Om scriptet listar "sajt/mappnamn/filnamn.zip" så går länken till "sajt/fil.zip".

Någon för förstår vad jag menar? Php är inte min starka sida. :r ;)

MatteMedlem sedan aug. 20002 975 inlägg
#2

$fil innehåller endast filnamnet så du får lägga till mappnamnet i länken:

echo "<a href=\"mappnamn/$fil\">$fil</a>";
DrydenMedlem sedan aug. 200218 625 inlägg
#3

Det fungerar! :bire

Det går inte lösa så att "mappnamn" hämtas från någonstans? Så att man slipper att fylla i mappnamnet på två ställen. Hänger du med? :)

MatteMedlem sedan aug. 20002 975 inlägg
#4
$mappnamn = 'mappnamn';
$visa=opendir($mappnamn);
	while($fil=readdir($visa)){
		if(!($fil=="."||$fil=="..")){
		echo "<a href=\"$mappnamn/$fil\">$fil</a>";
		}
	}
closedir($visa);
DrydenMedlem sedan aug. 200218 625 inlägg
#5

Sådär ja! Tackar! :bire

DrydenMedlem sedan aug. 200218 625 inlägg
#6

Lite mer problem. Scriptet länkar upp alla filer helt korrekt men av någon anledning så får man "Forbidden" när man försöker tanka filerna i fråga via scriptet. De finns ju där och standardrättigheterna ligger på (chmod 755).

Är det någon i scriptet som saknas?

MatteMedlem sedan aug. 20002 975 inlägg
#7

Det ska fungera, se här: http://www.a-kok.com/test/test_dryden.php

Kolla upp dina rättigheter på katalogen/filerna en gång till.

Det är inte så att det är bilder, och webbhotellet tillåter inte direktaccess till bilderna ?

DrydenMedlem sedan aug. 200218 625 inlägg
#8

Det är zipfiler som inte fungerar. Skickade upp en .txt-fil bara för att testa och den fungerade att köra, både med chmod 644 och 755.

Någon jag pratade med snackade om headers i scriptet, kan det vara något?

MatteMedlem sedan aug. 20002 975 inlägg
#9

Det ska inte vara någon skillnad med zip-filer: http://www.a-kok.com/test/test_dryden.php

Börjar du prata headers så är detta för en separat fil som identifierar sig som zip-fil.

Då blir det istället något sådant här i din kod:

$mappnamn = 'mappnamn';
$visa=opendir($mappnamn);
    while($fil=readdir($visa)){
        if(!($fil=="."||$fil=="..")){
        echo "<a href=\"showfile.php?filename=$fil\">$fil</a>";
        }
    }
closedir($visa);

Och sedan filen showfile.php

<?php // <-- Översta raden längs till vänster

$mappnamn = 'mappnamn';

if (isset($_GET['filename']) && fileexists($mappnamn.'/'.basename($_GET['filename']))) {

   $filename = basename($_GET['filename']);

   header("Content-type: application/zip");
   header("Content-Length: ".filesize($mappnamn.'/'.$filename));
   header("Content-Disposition: attachment; filename=$filename"); 

   $fp = fopen($mappnamn.'/'.$filename, "rb");
   fpassthru($fp);

}

exit;

?> // Slut fil

[EDIT]
Ibland så slinter man på tangentbordet med fingrarna. Ingen höjdare när man skriver kod :)
Se Nexus86 inlägg nedan. Tack Nexus86

Nexus86Medlem sedan okt. 20023 030 inlägg
#10

Rättelse,

header ("Content-type: applocation/zip");

// Ska bytas mot

header("Content-type: application/zip");

R// Se http://www.webforum.nu/showthread.php?s=&forumid=23&threadid=69262&highlight=attachment ang Content-Disposition

Nexus86Medlem sedan okt. 20023 030 inlägg
#11

Hmm.. Matte verkar ha sluntit med tangenterna på ett till ställe. ;)

Skriver en egen variant av samma fil som (förhoppningsvis) fungerar bättre.

I koden:

$mappnamn = 'mappnamn';
$visa=opendir($mappnamn);
    while($fil=readdir($visa)){
        if($fil != "." && $fil != ".."){
           echo "<a href=\"showfile.php?filename=$fil\">$fil</a>";
        }
    }
closedir($visa);

I showfile.php:

<? // <-- Översta raden längs till vänster

$mappnamn = 'mappnamn';

if (isset($_GET['filename']) && file_exists($mappnamn . '/' . basename($_GET['filename']))) {

   $filename = $_GET['filename'];

   header("Content-type: application/force-download");
   header("Content-Length: ".filesize($mappnamn . '/' . $filename));
   if (strpos($_SERVER['HTTP_USER_AGENT'], "MSIE") && !strpos($_SERVER['HTTP_USER_AGENT'], "Opera")) {
      header("Content-Disposition: filename=$filename%20");
   } else {
      header("Content-Disposition: attachment; filename=$filename");
   }

   readfile($mappnamn . '/' . $filename, TRUE);
}
?> // Slut på fil
139 ms totalt · 3 externa anrop · v20260731065814-full.30151723
135 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)