Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:02 Der er 40 kommentarer og
1 løsning

hent fil fra en mappe

Hej

Jeg har for langt tid siden fået en af mine venner til at lave denne kode, som henter filerne ind fra mappen sider via. index.php?side=forside

Nogen der kan lave så den er hurtigere om at finde filen, for syntes ikke den er få hurtig..


            <?php
            $side_mappe='./sider/';
            $side_type='.php';
            $side_standard='forside';
            $indhold_height = '750';

            if(!$side)
            {
            $side=$side_standard;
            }
            $side_komplet=$side_mappe.str_replace(array('/','.'),'',$side).$side_type;
            if(!is_readable($side_komplet))
            {
                echo '
              <table border="0" width="100%" cellspacing="0" cellpadding="3" height="661" style="border: 1px solid #FFFFFF">
                <tr>
                  <td width="100%" bgcolor="#556379" height="21" style="border-bottom: 1px solid #FFFFFF">
                    <p align="center"><font face="Verdana" style="font-size: 12px;"><b><font color="#FFFFFF">404 Fejl</font></b></p>
                    </font></td>
                </tr>
                <tr>
                  <td width="100%" bgcolor="#7989A2" height="'.$indhold_height.'" valign="top">
                  <font face="Verdana" style="font-size: 11px;"><center>Siden '.$side.' eksistere ikke, <a href="java script:history.go(-1)">klik her for at komme tilbage</a></center></font>
                  </td>
                </tr>
              </table>';
            $msg = 'Link: http://www.scooter-eksperten.dk/index.php?side='.$side;
            $recipient = 'mpj@scooter-eksperten.dk';
            $subject = '404 Fejl!';
            mail($recipient, $subject, $msg);
            }
            else
            {
            include $side_komplet;
            }
            ?>
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:03 #1
Altså i skal lave den så god & hurtig som overholdet muligt
Avatar billede fangel Nybegynder
17. januar 2004 - 11:06 #2
der er ingen ting det umidbart får det til at køre langsomt... usikker, ja - men ikke langsomt...

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:07 #3
Ok hvis den ikke kan blive hurtiger, så vil jeg godt have den så sikker som overholdet muligt.....
Avatar billede fangel Nybegynder
17. januar 2004 - 11:12 #4
det gør du fx ved at definere hvilke filer der er mulighed for at indkludere...

ex:

<?php
$filer[] = "forside;
$filer[] = "links";
// osv

if(isset($_GET['side'])){
  if(in_array($_GET['side'], $filer))
    include('/sider/' . $_GET['side'] . '.php');
  else{
    echo "siden findes ikke";
    // send email - kaldte side findes i $_GET['side']
  }
}
else{
  include('./sider/forside.php');
}
?>

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:15 #5
Kan du så ikke lave en kode som henter alle filnavene i mappen sider, for gider ikke skrive vær navn ind :/
Avatar billede fangel Nybegynder
17. januar 2004 - 11:16 #6
kan du da selv...

se ex. 1 på http://php.net/readdir

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:28 #7
Ser dette rigtigt ud?

<?php
if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].'/sider/')) {
while (false !== ($file = readdir($handle))) {
echo $file.'<br>';
}

closedir($handle);
}
?>

Men hvorfor udskriver den:

.
..
film.php
osv....

Hvordan laver jeg så den ikke udskriver:
.
..
Avatar billede fangel Nybegynder
17. januar 2004 - 11:29 #8
se hvordan ex. 2 gør det ;)
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:30 #9
Avatar billede fangel Nybegynder
17. januar 2004 - 11:32 #10
hvad bruger du af kode?

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:33 #11
Jeg har fundet ud af det, det skal se sådan ud:

<?php
if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].'/sider/')) {
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          echo '$filer[] = '.$file.'<br>';
      }
  }
  closedir($handle);
}
?>
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:35 #12
Har du en ide om hvordan man laver så den sletter .php på alle filerne?
Avatar billede fangel Nybegynder
17. januar 2004 - 11:35 #13
tja - og så evt lave noget der stripper .php væk ;)

echo '$filer[] = '.substr($file,0,-4).'<br>';

fjernet de sidste 4 tegn (.php)

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:39 #14
Er det ikke lidt fusk?

Eller vil det 100% virke?
Avatar billede fangel Nybegynder
17. januar 2004 - 11:42 #15
det fjener de sidste 4 tegn - hundrede...

du får også lige et svar så du kan fyre nogle point efter mig hvis du får sådanne lyster ,)

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:43 #16
Hvordan skal denne linje se ud?

$filer[] = substr($file,0,-4)\n; ?
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:43 #17
Den skal jo lave denne liste:

$filer[] = "forside;
$filer[] = "links";
osv..
Avatar billede fangel Nybegynder
17. januar 2004 - 11:43 #18
$filer[] = substr($file,0,-4) . "\n";
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:45 #19
Avatar billede fangel Nybegynder
17. januar 2004 - 11:46 #20
dvs:

<?php
echo "<pre>";
if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].'/sider/')) {
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          echo '$filer[] = ' . substr($file, 0, -4) . "\n";
      }
  }
  closedir($handle);
}
echo "</pre>";
?>

og så kan du copy-paste dens output ind i den første kode jeg skrev...

Morten
Avatar billede fangel Nybegynder
17. januar 2004 - 11:47 #21
gør som jeg jeg skrev lige før istedet for af genere listen hver gang - det gør den ca. lige så usikker... du skal validere mod kendte informationer for at sikre sig at folk ikke kan udnytte det...

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:48 #22
Den siger der er fejl i denne linje: if(in_array($_GET['side'], $filer))
Avatar billede fangel Nybegynder
17. januar 2004 - 11:49 #23
gør lige som jeg skrev 11:46:01, og vis så koden+ fejl... så ser jeg på det

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:51 #24
Sådan?

http://www.scooter-eksperten.dk/test.php

Koden står nederst på siden
Avatar billede fangel Nybegynder
17. januar 2004 - 11:52 #25
så mangler du bare

"og så kan du copy-paste dens output ind i den første kode jeg skrev..."...

dvs:

---
<?php

$filer[] = film
$filer[] = tuning
$filer[] = styling
$filer[] = tips_tricks
$filer[] = anbefal
$filer[] = kontakt
$filer[] = faq
$filer[] = tagwall
$filer[] = add_tag
$filer[] = nyheder
$filer[] = forside
$filer[] = tilkoersel_af_cylinder
$filer[] = begraensninger_sonic_03
$filer[] = speedoplader
$filer[] = hastighedsmaaling
$filer[] = Bedoem_af_netshops
$filer[] = begraensninger
$filer[] = cylinder_oversigt
$filer[] = afstemning
$filer[] = fjernelse_af_klistermaerke
$filer[] = olieblanding
$filer[] = kobling
$filer[] = billeder
$filer[] = bannerbyt
$filer[] = motoline_racing
$filer[] = udskaering_i_skjold
$filer[] = anmeldelser
$filer[] = anmeldelser_model
$filer[] = anmeldelser_motortyper
$filer[] = anmeldelser_tunmaerker
$filer[] = anmeldelser_skriv

if(isset($_GET['side'])){
  if(in_array($_GET['side'], $filer))
    include('/sider/' . $_GET['side'] . '.php');
  else{
    echo "siden findes ikke";
    // send email - kaldte side findes i $_GET['side']
  }
}
else{
  include('./sider/forside.php');
}
?>
---

Morten
Avatar billede fangel Nybegynder
17. januar 2004 - 11:55 #26
smutter en tur - så svare nok ikke lige forløbigt... leg selv med det

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 11:55 #27
Jeg ville jo have så hvis jeg laver en ny side feks. forside2.php så skal den  selv ligge den ind i $filer[]
Avatar billede mpj86 Nybegynder
17. januar 2004 - 12:10 #28
Hov vi mangler lige at lave så den kode som henter filerne skal hente dem sådan:

$filer[] = 'film';

Og ikke som det er nu med: $filer[] = film
Avatar billede mpj86 Nybegynder
17. januar 2004 - 12:39 #29
Kan man ikke bare gøre sådan?
Er den så sikker?




            <?php
            $side_mappe='./sider/';
            $side_type='.php';
            $side_standard='forside';

            if(isset($_GET['s'])) {
            if(!$side)
            {
            $side=$side_standard;
            }
            $side_komplet=$side_mappe.str_replace(array('/','.'),'',$side).$side_type;
            if(!is_readable($side_komplet))
            {
            echo 'Siden '.$side.' eksistere ikke';
            }
            else
            {
            include $side_komplet;
            }
            }
            ?>
Avatar billede fangel Nybegynder
17. januar 2004 - 13:53 #30
der skal slf lige '-er uden om, ja...

for at lave det på den sikreste måde - så SKAL det laves på den måde... ellers kan man, på den ene eller den anden måde, få adgang til filer man ikke burde have adgang til...
du SKAL validere siden mod et array du kender, og ikke et det bliver genereret !

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 15:23 #31
ok hvordan får jeg den til at udskrive dem sådan?

$filer[] = 'film';
Avatar billede fangel Nybegynder
17. januar 2004 - 15:29 #32
?php
echo "<pre>";
if ($handle = opendir($_SERVER['DOCUMENT_ROOT'].'/sider/')) {
  while (false !== ($file = readdir($handle))) {
      if ($file != "." && $file != "..") {
          echo '$filer[] = ' . "'" . substr($file, 0, -4) . "';\n";
      }
  }
  closedir($handle);
}
echo "</pre>";
?>

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 15:47 #33
Avatar billede mpj86 Nybegynder
17. januar 2004 - 15:48 #34
Den kode til at skrive sådan: $filer[] = 'film'; virker..

Men ikke når man vil hente siderne: http://www.scooter-eksperten.dk/test.php?side=film
Avatar billede mpj86 Nybegynder
17. januar 2004 - 15:52 #35
Fejlen:


Warning: main(/sider/nyheder.php): failed to open stream: No such file or directory in /web/www.scooter-eksperten.dk/www/test.php on line 37

Warning: main(): Failed opening '/sider/nyheder.php' for inclusion (include_path='.:/usr/local/lib/php') in /web/www.scooter-eksperten.dk/www/test.php on line 37
Avatar billede fangel Nybegynder
17. januar 2004 - 16:06 #36
lav det om til

<?php

// $filer[]...
// osv

if(isset($_GET['side'])){
  if(in_array($_GET['side'], $filer))
    include('./sider/' . $_GET['side'] . '.php');
  else{
    echo "siden findes ikke";
    // send email - kaldte side findes i $_GET['side']
  }
}
else{
  include('./sider/forside.php');
}
?>

du havde forglemt et . ;)

Morten
Avatar billede mpj86 Nybegynder
17. januar 2004 - 16:14 #37
Nu virker det :)

Er det så sikker lavet som overholdet muligt?
Avatar billede mpj86 Nybegynder
17. januar 2004 - 16:16 #38
Er det ikke sådan det skal være?

if(isset($_GET['side'])) {
  if(in_array($_GET['side'], $filer)) {
    include('./sider/' . $_GET['side'] . '.php');
} else {
    echo "siden findes ikke";
    // send email - kaldte side findes i $_GET['side']
  }
} else {
  include('./sider/forside.php');
}

Har tilføjet en } & {
Avatar billede fangel Nybegynder
17. januar 2004 - 18:40 #39
begge burde virke...

Morten
Avatar billede Slettet bruger
17. januar 2004 - 19:13 #40
mpj86: Morten har bare et eller andet imod {} når de ikke er påkrævet. Hvis du gerne vil have dem, så skader de ikke. Jeg foretrækker at have dem altid - selv når jeg laver en enlinies-if.
Avatar billede fangel Nybegynder
17. januar 2004 - 19:21 #41
sandbox -> thi er rygtet om mig kommet så langt ;) hæhæ...

forklaring:

{} indekranser en blok, så de er påkrævet når der er mere end en linie - hvis der derimod ikke er det så behøves blokken ikke... se dette lille ex:

<?php

if(false)
  echo "1"; // ikke udført
  echo "2";  // udført

if(false){
  echo "1"; // ikke udført
  echo "2"; // ikke udført
}

Morten
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