Avatar billede lsskaarup Nybegynder
15. juli 2005 - 13:54 Der er 15 kommentarer og
3 løsninger

Sti kan ikke åbnes på alle maskiner - brandslukning

Jeg har et kodestump som henter og viser indholdet af en mappe. Meningen er så, at brugerne også skal kunne åbne indholdet ved at klikke på linket det leverer.

Men det er ikke alle maskiner som man kan det på, hvorfor?

Jeg håber nogle kan løse dette hurtigt og nemt, for der er virkelig tale om brandslukning.

Koden:

<?php
    include('static/opsaetning.php');

function forceDir($dir){//Funktion der opretter alle undermapper
    $subs = explode('/', $dir);
    $tmp = '';
    foreach($subs as $name){
        $tmp = $tmp . $name;
        if (!file_exists($tmp)){
            mkdir( $tmp );
            }
            $tmp = $tmp . '/';
      }
    return $dir;
}


function showDir($root, $dir) {

    include('static/opsaetning.php');
    //$KATALOG = "DS Spærsalg";
    //$SERVER = "srv-fil1";

    $filliste = array();
    //$showdir = "//" . $SERVER . "/" . $KATALOG . "/" . $root;
    $type = substr("$root", 0, strpos($root, "/"));
    $mappe1;
    $mappe2;
    if ($type == Tilbud) {//Tjekker hvilken type sagen er, tilbud/ordre
        $num = substr("$root", -6);
        $mappe1 = substr($num, -5, 1);
        $mappe2 = substr($num, -4, 1);
        $ubermappe = substr($num, -6, 2);
        $slutmappe;
        $startmappe = $mappe1 . $mappe2 . "000";
        if ($mappe1 == 0){
            $slutmappe = (($mappe2 +1) . "000") - 1;
            $startmappe = $mappe2 . "000";
        } else {
            $slutmappe = ((($mappe1 . $mappe2)+1) . "000" -1);
        }
        if ($slutmappe<"1000"){
            $mappenavn = $ubermappe . $startmappe ."-". $ubermappe . "0".$slutmappe;
        } else {
            $mappenavn = $ubermappe . $startmappe ."-". $ubermappe . $slutmappe;
        }
        $root = $type . "/" . $mappenavn . "/" . $num;
    } else {
        $num = substr("$root", -5);
        $mappe1 = substr($num, -3, 1);
        $mappe2 = $mappe1 + 1;
        $ubermappe = substr($num, -6, 2);
        if ($mappe1 > 0){
            $mappe1 = $mappe1 . "00";
        }
        $mappenavn = $ubermappe . $mappe1 . "-" . $ubermappe . ($mappe2 . "00" -1);
        $root = $type . "/" . $mappenavn . "/" . $num;
    }

    //echo $root;

    $showdir = "//" . $SERVER . "/" . $KATALOG . "/" . $root;

    forceDir($showdir);//Kalder funktion som opretter undermapper

    for($i=1; $i<=count($ORDRE); $i++){
        $mail = "//" . $SERVER . "/" . $KATALOG . "/" . $root . "/" . $ORDRE[$i];
        mkdir($mail);
    }

    for($i=1; $i<=count($TILBUD); $i++){
        $mail = "//" . $SERVER . "/" . $KATALOG . "/" . $root . "/" . $TILBUD[$i];
        mkdir($mail);
    }

    if ($dir != '') {
        $showdir .= $dir;
        $filliste[] = "<a href=\"stifinder.php?root=$root&dir=" . substr_replace($dir, '', strrpos($dir, '/')    ) . "\">..</a>";
    }
    if ($handle = opendir($showdir)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != "." && $file != ".." && $file[0] != "~") {
                if (is_dir($showdir . "/" . basename($file))) {
                    $filliste[] = "<a href=\"stifinder.php?root=$root&dir=".$dir."/".basename($file)."\">" . basename($file) . "</a>";
                } else {
                    $filliste[] = "<a href=\"file:". $showdir . "/" . basename($file) ."\" target=\"_blank\">" . basename($file) . "</a>";
                }
            }
        }   
    }
      closedir($handle);

    return $filliste;
}
?>

<html>
<style>
body, table, tr, td {
    margin-bottom : 0px;
    margin-left : 0px;
    margin-right : 0px;
    margin-top : 0px;
    font-family : Geneva, Arial, Helvetica, sans-serif;
    font-size: 13px;
}
a {
    text-decoration: none;
    color: black;

}
</style>
<body>
<table width="500">
<?php
$filliste = showDir($_GET['root'], $_GET['dir']);
foreach($filliste as $fil) {
  echo "<tr><td>$fil</td></tr>";
}

?>
</table>
</body>
</html>
Avatar billede myplacedk Nybegynder
15. juli 2005 - 13:59 #1
Hent en side frem, som indeholder links, som ikke fungerer for alle. Vælg "Vis kilde" eller tilsvarende i din browser, find de links der er problemer med, og vis HTML'en her.
Avatar billede erikjacobsen Ekspert
15. juli 2005 - 14:21 #2
Er det links fra linien

  "<a href=\"file:"....

du har problemer med?
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 14:38 #3
Jeg tror det er noget med specialbogstaver den har svært ved. Den kommer i hvert fald med en fejlmeddelelse, hvor æ er ændret til et eller andet procenttegn og en værdi. Det er jo nok encoden der er problemet.

Selve "vis kilde" kommer senere.
Avatar billede myplacedk Nybegynder
15. juli 2005 - 14:47 #4
Jeg ved ikke hvad der er problemer med, og det er ret besværligt at finde ud af det bare ved at kigge på koden.

Jeg vil også tro det har noget med specialtegn at gøre. Sådan plejer det at være, når nogle links virker, mens andre ikke gør, selv om de er lavet på samme måde.
Avatar billede myplacedk Nybegynder
15. juli 2005 - 14:50 #5
Den generelle løsning er urlencode(). Eksempel:

$navn = @$_GET['navn']; // $navn er nu en streng, som kan indeholde næsten hvad som helst
echo '<a href="/foobar.php?navn='.urlencode($navn.'">Klik her</a>';

Hvis det link fungerer uden specialtegn, gør det også med.
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:07 #6
Her er koden fra "vis kilde"

<html>
<style>
body, table, tr, td {
    margin-bottom : 0px;
    margin-left : 0px;
    margin-right : 0px;
    margin-top : 0px;
    font-family : Geneva, Arial, Helvetica, sans-serif;
    font-size: 13px;
}
a {
    text-decoration: none;
    color: black;

}
</style>
<body>
<table width="500">
<tr><td><a href="stifinder.php?root=Ordre/40700-40799/40728&dir=/0_E-mail">0_E-mail</a></td></tr><tr><td><a href="stifinder.php?root=Ordre/40700-40799/40728&dir=/0_Halber">0_Halber</a></td></tr><tr><td><a href="stifinder.php?root=Ordre/40700-40799/40728&dir=/0_Tegninger">0_Tegninger</a></td></tr><tr><td><a href="file://\\srv-fil1\/DS Spærsalg/Ordre/40700-40799/40728/Forslag til instøpning Åge Hofstad.LT 2000.1.dwg" target="_blank">Forslag til instøpning Åge Hofstad.LT 2000.1.dwg</a></td></tr><tr><td><a href="stifinder.php?root=Ordre/40700-40799/40728&dir=/H">H</a></td></tr><tr><td><a href="file://\\srv-fil1\/DS Spærsalg/Ordre/40700-40799/40728/ordre40728R0-kalkulation.rtf" target="_blank">ordre40728R0-kalkulation.rtf</a></td></tr><tr><td><a href="file://\\srv-fil1\/DS Spærsalg/Ordre/40700-40799/40728/ordre40728R0-nordisk.rtf" target="_blank">ordre40728R0-nordisk.rtf</a></td></tr><tr><td><a href="file://\\srv-fil1\/DS Spærsalg/Ordre/40700-40799/40728/Snitt ÅgeHellesvik LT 20001.dwg" target="_blank">Snitt ÅgeHellesvik LT 20001.dwg</a></td></tr></table>
</body>
</html>
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:09 #7
Hov, her er delv samme kode, bare fra min maskine, hvor det virker:


<html>
<style>
body, table, tr, td {
    margin-bottom : 0px;
    margin-left : 0px;
    margin-right : 0px;
    margin-top : 0px;
    font-family : Geneva, Arial, Helvetica, sans-serif;
    font-size: 13px;
}
a {
    text-decoration: none;
    color: black;

}
</style>
<body>
<table width="500">
<tr><td><a href="stifinder.php?root=Ordre/40500-40599/40556&dir=/0_E-mail">0_E-mail</a></td></tr><tr><td><a href="stifinder.php?root=Ordre/40500-40599/40556&dir=/0_Halber">0_Halber</a></td></tr><tr><td><a href="stifinder.php?root=Ordre/40500-40599/40556&dir=/0_Tegninger">0_Tegninger</a></td></tr><tr><td><a href="file://srv-fil1/DS Spærsalg/Ordre/40500-40599/40556/ordre40556R0-kalkulation.rtf" target="_blank">ordre40556R0-kalkulation.rtf</a></td></tr><tr><td><a href="file://srv-fil1/DS Spærsalg/Ordre/40500-40599/40556/ordre40556R0-nordisk.rtf" target="_blank">ordre40556R0-nordisk.rtf</a></td></tr></table>
</body>
</html>
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:10 #8
Fejlkode:
<a href="file://\\srv-fil1\/DS Spærsalg/Ordre/40700-40799/40728/Forslag til instøpning Åge Hofstad.LT 2000.1.dwg" target="_blank">Forslag til instøpning Åge Hofstad.LT 2000.1.dwg</a>

Rigtig kode:
<a href="file://srv-fil1/DS Spærsalg/Ordre/40500-40599/40556/ordre40556R0-kalkulation.rtf" target="_blank">ordre40556R0-kalkulation.rtf</a>

Så sætter den åbenbart nogle \\ ind, hmm
Avatar billede myplacedk Nybegynder
15. juli 2005 - 15:20 #9
Jeg kan nu se at der overhovedet ikke er taget hensyn til specialtegn.
Men først, fx "\\srv-fil1\/DS Spærsalg" - Jeg er ikke sikker på hvad Windows siger til "\/". Det ser i hvert fald forkert ud for mig.

Men ellers, der er tre steder urler bliver genereret, jeg foreslår at indsætte urlencode (og en enkelt str_replace) sådan her: (utestet)

$filliste[] = "<a href=\"stifinder.php?root=".urlencode($root)."&dir=" . urlencode(substr_replace($dir, '', strrpos($dir, '/')    )) . "\">..</a>";
$filliste[] = "<a href=\"stifinder.php?root=".urlencode($root)."&dir=".urlencode($dir)."/".urlencode(basename($file))."\">" . basename($file) . "</a>";
$filliste[] = "<a href=\"file:". str_replace('%2F', '/', urlencode($showdir)) . "/" . urlencode(basename($file)) ."\" target=\"_blank\">" . basename($file) . "</a>

str_replace er indsat som en genvej. I en sti som "a/b/c" skal a, b og c urlencodes, men / skal ikke (i dette tilfælle).

Når der er urler, som ikke virker, er det så ALLE file:-urler, eller er det kun nogen af dem?
Avatar billede myplacedk Nybegynder
15. juli 2005 - 15:23 #10
> Så sætter den åbenbart nogle \\ ind, hmm

Tilsyneladende kommer både \\ og den efterfølgende \ fra $SERVER, som nok bliver sat i static/opsaetning.php
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:24 #11
På de maskiner hvor de ikke virker, ja, så er det alle.

Det mærkelige er som du kan, se at på bl.a. min maskine, kommer "\" ikke. Hvorfor fanden er det ikke alle steder det er galt? Er det noget opsætning i Windows?
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:29 #12
i opsaetning.php ser variablerne sådanne ud:
$SERVER = 'srv-fil1';
$KATALOG = 'DS Spærsalg';
Avatar billede lsskaarup Nybegynder
15. juli 2005 - 15:46 #13
Nå, det er ikke en showstopper. Selvfølgelig, skal vi have det løst, men jeg går på ferie i 2 uger nu, og jeg ved faktisk ikke om jeg kan genskabe problemet der hjemme, men det må vi lige se.
Avatar billede myplacedk Nybegynder
15. juli 2005 - 15:58 #14
Du kan prøve at insætte echo '<p>$SERVER: '.$SERVER.'</p>'; o. lign. lidt rundt omkring, så du kan se hvor de backslashes dukker op henne. Jeg tror bestemt ikke det er i den kode du har vist, så første sted du kan prøve er lige efter include('static/opsaetning.php').
Avatar billede lsskaarup Nybegynder
05. august 2005 - 13:05 #15
Ahhh, det er sgu utroligt, at man hele tiden skal holde øje med brugerne.

Systemet er lavet på den måde, at der er en administrationsdel, hvor nogle superbruger kan gå ind og ændre/opsætte/slette enkelte indstillinger, bl.a. adressen til serveren, og prøv engang at gætte hvad der stå der. Ja, nemlig \\srv-fil1\, og min kode hiver jo bare hele tekstestrengen ind, så derfor kom de mærkelige \\.

Så nu virker det, det mærkelige er bare, at enkelte maskiner godt kunne åbne filerne/links selvom der var nogle \ som ikke skulle være der.

Men ligger du et svar myplacedk, for du fik mig jo til at prøve med $SERVER, og der ud af kunne jeg se, at det måtte komme fra administrationsdelen, altså static/opsaetning.php
Avatar billede lsskaarup Nybegynder
05. august 2005 - 13:06 #16
ups, det havde du jo ;-)
Avatar billede myplacedk Nybegynder
05. august 2005 - 16:09 #17
Ja, den største trussel mod IT er ofte brugerne, man burde afskaffe dem. ;-)
Avatar billede lsskaarup Nybegynder
06. august 2005 - 14:02 #18
Ja, hørt ;-P
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