Avatar billede freekyzone Nybegynder
18. september 2008 - 17:40 Der er 22 kommentarer og
1 løsning

Stifinder-script med æ og ø og å i

Jeg har dette script som jeg bruger som "stifinder" på nogle filer på min servere.
Men den kan IKKE håndtere æøå ÆØÅ. Den kan vise indholdet, men når der klikkes på en fil som enten ligger i en mappe med æøå eller der er æøå i filnavnet står den af.

Hvad mangler jeg?

<?
$dir = $_GET['dir'];

    if (!isset($dir)) $dir = "./filer";
    echo '<img src="../img/filtyper/mappe.gif"><b>&nbsp;'.basename($dir).'</b>';
    echo "<hr>";
    echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
<tr>
<td><b>Navn</b>
</td>
<td width=85><b><p align=center>Størrelse</p></b>
</td>
<td width=160><b><p align=center>Dato</p></b>
</td>
</tr>";
    $handle = opendir($dir);
    $filer = array();
    $mapper = array();
    while (false !== ($file = readdir($handle)))
    {
        if ($file != "." && $file != "..")
        {
            if (is_dir($dir."/".$file))
            {
                  $mapper[] = $dir . '/' . $file;
            }
            else
            {
                $filer[] = $dir . '/' . $file;
            }
        }
    }
    closedir($handle);
   
    natcasesort( $mapper );
    natcasesort( $filer );
   
    foreach ( $mapper as $mappe )
    {
        echo '<tr><td><img src="../img/filtyper/mappe.gif">&nbsp;<a href="?dir='.$mappe.'">'.basename($mappe).'</a>
              </td><td>&nbsp;</td><td>&nbsp;</td></tr>';
    }
   
    foreach ( $filer as $fil )
    {
//        $type = strtolower(substr($fil,-3));
                $type = end(explode('.', $fil));
        $ico = ''.$type.'.gif';
        $storrelse = number_format((filesize($fil)/1024), 0, ',', '.');
        $modifydate = date ("d-m-Y H:i:s", filemtime($fil));
 
     
        echo '<tr><td><img src="../img/filtyper/'.$ico.'">&nbsp;<a href="'.$fil.'">'.basename($fil).'</a>
              </td><td><p align=right>&nbsp;'.$storrelse.' KB&nbsp;</p></td><td><p align=right>&nbsp;'.$modifydate.'&nbsp;</p></td></tr>';
    }

?>
Avatar billede showsource Seniormester
18. september 2008 - 18:22 #1
Prøv at urlencode dit link
Avatar billede showsource Seniormester
18. september 2008 - 18:25 #2
Og har du overvejet muligheden for at skrive
ditdomain/phpfil?dir=../../../

?????
Avatar billede olebole Juniormester
18. september 2008 - 18:39 #3
<ole>

Undgå altid specialtegn i filnavne - og hvis dine brugere skal uploade, så prøv at lære dem det samme, så de lærer at bruge WWW sådan som WWW er indrettet og har været det lige siden fremkomsten  ;o)

/mvh
</bole>
Avatar billede w13 Novice
18. september 2008 - 19:03 #4
Det er, fordi filernes navne er i et andet tegnsæt. Sikkert i ASCII. Jeg har selv løst det ved først at undersøge, om filen findes. Hvis den ikke gør det, urlencoder jeg filnavnet og tjekker igen med det nye encodede navn, om den findes. Det har løst problemet.
Avatar billede freekyzone Nybegynder
18. september 2008 - 20:14 #5
showsource ->

urlencode ???
Avatar billede showsource Seniormester
18. september 2008 - 20:24 #6
F.eks.
<a href="?dir='.urlencode($mappe).'">
<a href="?dir='.urlencode($fil).'">
Avatar billede w13 Novice
27. september 2008 - 13:20 #7
Kommet videre?
Avatar billede freekyzone Nybegynder
16. november 2008 - 19:32 #8
Sorry..

F.eks.
<a href="?dir='.urlencode($mappe).'">
<a href="?dir='.urlencode($fil).'">

Det virker slet ikke - så er der intet som virker...
Avatar billede w13 Novice
16. november 2008 - 19:40 #9
Får du en fejl? Eller hvordan udskrives det i kildekoden?
Avatar billede showsource Seniormester
16. november 2008 - 19:42 #10
Virker for mig:

$dirpath = "Rødgrød med fløde";

echo'<a href="new.php?dir='.urlencode($dirpath).'">'.$dirpath.'</a>';

if(isset($_GET["dir"])) {
echo"<p>".$_GET["dir"];
}
Avatar billede olebole Juniormester
16. november 2008 - 19:44 #11
Det er ikke meningen, man skal bruge specialtegn i fil- eller mappenavne på WWW. Den slags skaber mange forskellige problemer - og når/hvis du får løst dette problem, kan du sætte dig ned og vente på, det næste viser sig.

Hvorfor ikke bare undlade specialtegn i mappe- og filnavne?
Avatar billede freekyzone Nybegynder
17. november 2008 - 18:22 #12
Problemet er, at jeg skal bruge det som en stifinder på en side, hvor mange studerende ligger deres notater ud.
Og så er det nemmere hvis jeg kan programmere mig ud af æøå, end at skulle oplære mange studerende i IKKE at bruge æøå i filnavnet.

Nogen forslag?
Avatar billede showsource Seniormester
17. november 2008 - 18:47 #13
Hvis den kode jeg har vist ikke virker, så må du vise den kode som du bruger.

MEn ellers "lægger deres notater ud", hvordan det? Via ftp ?
Avatar billede showsource Seniormester
17. november 2008 - 18:52 #14
Nå, mig som kun ser din kommentar!
Avatar billede olebole Juniormester
17. november 2008 - 20:44 #15
For det første kræver det ikke stort andet end:
    <input type="file" name="myFile" onchange="if(!(/^[a-z0-9\._-]*$/i).test(this.value)alert('Filnavnet må kun indeholde bogstaverne a-z, tal, samt punktum, underscore og bindestreg'))">

Hvis de kan lære at flytte en plastikklump rundt på bordet, mens de relaterer dens bevægelser til en pils position på en lysende skærm, må de så let som ingenting kunne lære at udelade tre-fire tegn i et filnavn ... ikke mindst, hvis adgangen til deres noter afhænger af det. Ellers finder jeg det lidt vanskeligt at få øje på, hvad det er, de evner at studere  =)
Avatar billede freekyzone Nybegynder
18. november 2008 - 17:30 #16
Koden lige nu:

<table style="width:100%; height:100%">
  <tr>
    <td>
        <?

    if (!isset($_GET['dir']))
    $dir = "filer";
    else
    $dir = $_GET['dir'];
    echo '<img src="../img/filtyper/mappe.gif"><b>&nbsp;'.basename($dir).'</b>';
    echo "<hr>";
    echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
<tr>
<td colspan=2><b>Navn</b>
</td>
<td width=85><b><p align=center>Størrelse</p></b>
</td>
<td width=160><b><p align=center>Dato</p></b>
</td>
</tr>";
    $handle = opendir($dir);
    $filer = array();
    $mapper = array();
    while (false !== ($file = readdir($handle)))
    {
        if ($file != "." && $file != "..")
        {
            if (is_dir($dir."/".$file))
            {
                  $mapper[] = $dir . '/' . $file;
            }
            else
            {
                $filer[] = $dir . '/' . $file;
            }
        }
    }
    closedir($handle);
   
    natcasesort( $mapper );
    natcasesort( $filer );
   
    foreach ( $mapper as $mappe )
    {
        echo '<tr><td><img src="../img/filtyper/mappe.gif"></td>
        <td>&nbsp;<a href="?dir='.$mappe.'">'.basename($mappe).'</a>
              </td><td>&nbsp;</td><td>&nbsp;</td></tr>';
    }
   
    foreach ( $filer as $fil )
    {
        $type = strtolower(substr($fil,-3));
        $ico = ''.$type.'.gif';
        $storrelse = number_format((filesize($fil)/1024), 0, ',', '.');
        $modifydate = date ("d-m-Y H:i:s", filemtime($fil));
 
     
        echo '<tr><td><img src="../img/filtyper/'.$ico.'"></td>
        <td>&nbsp;<a href="'.$fil.'">'.basename($fil).'</a>
              </td><td><p align=right>&nbsp;'.$storrelse.' KB&nbsp;</p></td><td><p align=right>&nbsp;'.$modifydate.'&nbsp;</p></td></tr>';
    }
echo "</table>";
?>
    </td>
  </tr>
</table>

Koden som ikke virkede:

<table style="width:100%; height:100%">
  <tr>
    <td>
        <?

    if (!isset($_GET['dir']))
    $dir = "filer";
    else
    $dir = $_GET['dir'];
    echo '<img src="../img/filtyper/mappe.gif"><b>&nbsp;'.basename($dir).'</b>';
    echo "<hr>";
    echo "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\">
<tr>
<td colspan=2><b>Navn</b>
</td>
<td width=85><b><p align=center>Størrelse</p></b>
</td>
<td width=160><b><p align=center>Dato</p></b>
</td>
</tr>";
    $handle = opendir($dir);
    $filer = array();
    $mapper = array();
    while (false !== ($file = readdir($handle)))
    {
        if ($file != "." && $file != "..")
        {
            if (is_dir($dir."/".$file))
            {
                  $mapper[] = $dir . '/' . $file;
            }
            else
            {
                $filer[] = $dir . '/' . $file;
            }
        }
    }
    closedir($handle);
   
    natcasesort( $mapper );
    natcasesort( $filer );
   
    foreach ( $mapper as $mappe )
    {
        echo '<tr><td><img src="../img/filtyper/mappe.gif"></td>
        <td>&nbsp;<a href="?dir='.urlencode($mappe).'">'.basename($mappe).'</a>
              </td><td>&nbsp;</td><td>&nbsp;</td></tr>';
    }
   
    foreach ( $filer as $fil )
    {
        $type = strtolower(substr($fil,-3));
        $ico = ''.$type.'.gif';
        $storrelse = number_format((filesize($fil)/1024), 0, ',', '.');
        $modifydate = date ("d-m-Y H:i:s", filemtime($fil));
 
     
        echo '<tr><td><img src="../img/filtyper/'.$ico.'"></td>
        <td>&nbsp;<a href="'.urlencode($fil).'">'.basename($fil).'</a>
              </td><td><p align=right>&nbsp;'.$storrelse.' KB&nbsp;</p></td><td><p align=right>&nbsp;'.$modifydate.'&nbsp;</p></td></tr>';
    }
echo "</table>";
?>
    </td>
  </tr>
</table>

Jeg er frisk på at lave det som en slags FTP, hvis det hjælper på problemet...
Eller noget andet "stifinder" via PHP.
Avatar billede showsource Seniormester
18. november 2008 - 18:29 #17
Det du ikke kan få til at virke, virker fint for mig på min windåze + en FreeBSD host.
Omend på FreeBSD er viste speciategn "noget vrøvl", men det er et spm. om at bruge korrekt enoding i doc.
Avatar billede showsource Seniormester
18. november 2008 - 18:31 #18
Og så bør du lige tjekke hvilket dir du læser igennem!
Avatar billede freekyzone Nybegynder
16. december 2008 - 19:19 #19
showsource -> Jeg kan ikke forstå at du kan få det til at virke.

Den koder godt nok om fra æøå til %20.... bla bla. Men Filen kan ikke hentes.. Nogen forslag?
Avatar billede showsource Seniormester
16. december 2008 - 20:34 #20
ehh, kunne nok finde ud af noget, men mit eneste forslag er olebole kommet med tidligere.

Hvad en bruger kan se på en side, og hvad der står i url er to forskellige ting.
Avatar billede freekyzone Nybegynder
23. marts 2009 - 21:52 #21
Jeg kan bare ikke få det til at virke... Hmm...
Avatar billede freekyzone Nybegynder
21. august 2010 - 11:12 #22
Lukker, uden løsning.
Avatar billede freekyzone Nybegynder
21. august 2010 - 11:13 #23
.
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