DrydenMedlem sedan aug. 200218 625 inlägg 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 $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 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 $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 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 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 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 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 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 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