Avatar billede Mik2000 Professor
03. april 2005 - 19:01 Der er 25 kommentarer og
3 løsninger

Læs mappe, skriv op men hvordan uden mapper skrives

while ($filnavn = readdir($mappe)) {
if ($filnavn != "." && $filnavn != ".." && $filnavn != "Thumbs.db") {
echo <a href=\"".$mappenavn.$filnavn."\" target=\"_blank\">".$filnavn."</a>
}
}

Hvis jeg har sådan en sætning og gerne vil have at denne heller ikke skriver mapper på denne liste hvordan kan det så gøres?
Har læst om is_dir, men ved ikke om den skal bruges eller hvordan.

Håber du kan hjælpe.
Avatar billede jaw Nybegynder
03. april 2005 - 19:03 #1
Måske ikke den smukkeste løsning, og måske er der nogen der har en bedre, men:

if ($filnavn != "." && $filnavn != ".." && $filnavn != "Thumbs.db" && !ereg("\/", $filnavn)) {
Avatar billede jaw Nybegynder
03. april 2005 - 19:03 #2
Har ikke prøvete is_dir, men den kan du måske bruge ved:

if ($filnavn != "." && $filnavn != ".." && $filnavn != "Thumbs.db" && !is_dir($filnavn)) {

:)
Avatar billede bromer Nybegynder
03. april 2005 - 19:15 #3
. og .. bliver af PHP betragtet som dirs så det kan du forkorte til:

if (!is_dir($filnavn)) {
Avatar billede jaw Nybegynder
03. april 2005 - 19:24 #4
Bah, Bromer, den burde jeg have tænkt på - teamwork :) Men mangler vi lige thumbs.db:

if (!is_dir($filnavn) && $filnavn != "Thumbs.db") {
Avatar billede Mik2000 Professor
03. april 2005 - 19:46 #5
Tak for de hurtige svar. Men det virker ikke. Hvis jeg benytter
if (!is_dir($filnavn) && $filnavn != "Thumbs.db") { eller
if ($filnavn != "." && $filnavn != ".." && $filnavn != "Thumbs.db" && !ereg("\/", $filnavn)) {

så giver det samme resultat.
Den fjerner "." og ".."
Men de mapper jeg selv har haft oprettet skriver den stadig :(.

Håber I stadig er friske med ideer :)
Avatar billede jaw Nybegynder
03. april 2005 - 19:53 #6
At min første ereg-løsning ikke virker skyldes selvf. at der ikke står /mappe men bare mappe - der huskede jeg forkert. Men jeg har lige prøvet den med !is_dir($filnavn) og det virker fint for mig. Sikker på du har opdateret den, og at den ikke er cachet?
Avatar billede bromer Nybegynder
03. april 2005 - 20:22 #7
Den sidste ereg er eller ikke rigtig. Den vil match på for eksempel "./minfilphp" selvom det faktisk er en fil. Derudover fungerer is_dir helt tilstrækkeligt idet is_dir("mindir/subdir/subsubdir") retunerer true, hvis det er et dir.

Den løsning jaw postede klokken 19:24:55 burde fungere fint
Avatar billede detox Nybegynder
03. april 2005 - 20:22 #8
Nok fordi du skal bruge:

if (!is_dir("$mappe/$filnavn") && $filnavn != "Thumbs.db") {

eller:

if (!is_dir("$mappe$filnavn") && $filnavn != "Thumbs.db") {
Avatar billede detox Nybegynder
03. april 2005 - 20:23 #9
Alt efter om $mappe har / til sidst eller ej.
Avatar billede Mik2000 Professor
03. april 2005 - 20:31 #10
while ($filnavn = readdir($mappe)) {
if (!is_dir($filnavn) && $filnavn != "Thumbs.db") {
echo "<a href=\"".$mappenavn.$filnavn."\" target=\"_blank\">".$filnavn."</a>";
}
}

Hvis jeg bruger det her så skriver den også navnene på mapperne. Har jeg gjort noget forkert her. Har prøvet at tømme cache mv.
Avatar billede jaw Nybegynder
03. april 2005 - 20:32 #11
Kig på detox's kommentar, han har vist en pointe
Avatar billede bromer Nybegynder
03. april 2005 - 20:33 #12
der er heller ikke nogen variabel der hedder $mappenavn.. men derimod $mappe.. prøv med

while ($filnavn = readdir($mappe)) {
if (!is_dir($filnavn) && $filnavn != "Thumbs.db") {
echo "<a href=\"".$mappe.$filnavn."\" target=\"_blank\">".$filnavn."</a>";
}
}
Avatar billede Mik2000 Professor
03. april 2005 - 20:34 #13
Hvis jeg nu laver den om så der står is_dir istedet for !is_dir så viser den også kun:
"." og ".." men ikke de andre mapper som ligger der
Avatar billede bromer Nybegynder
03. april 2005 - 20:37 #14
detox: der er ingen grund til at undersøge hvorvidt mappen ender med "/" da det er helt lovligt at indsætte det. F.eks. giver

<?
if (is_dir("/home//bromer")) print "/home//bromer er en mappe\n";
?>

outputtet "/home//bromer er en mappe\n"
Avatar billede detox Nybegynder
03. april 2005 - 20:38 #15
!is_dir($filnavn) vil ikke virke uden stien, brug:

!is_dir($mappe.$filnavn) eller: !is_dir("$mappe/$filnavn")
Avatar billede bromer Nybegynder
03. april 2005 - 20:41 #16
detox: jeg er helt klar på det med at mappen skal med, jeg siger bare at der ikke er nogen grund til at teste hvorvidt man skal bruge "!is_dir($mappe.$filnavn)" eller "!is_dir("$mappe/$filnavn")" da den sidste altid vil fungere selvom $mappe ender med "/".

mik2000: Det må være noget galt hos dig fordi følgende kode virker fint hos mig. Den viser hverken mapper ller "Thumbs.db".

$rs = opendir(".");
while ($filnavn = readdir($rs)) {
if (!is_dir($filnavn) && $filnavn != "Thumbs.db") {
echo "<a href=\"".$mappe.$filnavn."\" target=\"_blank\">".$filnavn."</a><br/>";
}
}

Men det kan være fordi du sidder på en windows.. prøv med:

$rs = opendir(".");
while ($filnavn = readdir($rs)) {
if (!is_dir($filnavn) && $filnavn != "Thumbs.db") {
echo "<a href=\"".$mappe."\" . $filnavn."\" target=\"_blank\">".$filnavn."</a><br/>";
}
}
Avatar billede Mik2000 Professor
03. april 2005 - 20:50 #17
Den fulde ser ud som her:

$mappenavn = "../images/galleri/";
$mappe = opendir($mappenavn);

while ($filnavn = readdir($mappe)) {
//if ($filnavn != "." && $filnavn != ".." && $filnavn != "Thumbs.db" ) {
if ($filnavn != "Thumbs.db" && !is_dir($filnavn)) {
echo "<a href=\"".$mappenavn.$filnavn."\" target=\"_blank\">".$filnavn."</a> - <a href=\"uploadbilleder_slet.php?fj=fj&pic=".$mappenavn.$filnavn."&fil=".$filnavn."\">Slet billede</a><br><br>";
}
}
Avatar billede detox Nybegynder
03. april 2005 - 20:50 #18
Hvis nu linjen ovenover den kode vi har set er:

$mappe = opendir($mappenavn);

må det blive:

$mappe = opendir($mappenavn);
while (false !== ($filnavn = readdir($mappe))) {
  if (!is_dir("$mappenavn/$filnavn") && $filnavn != "Thumbs.db") {
    echo "<a href='".$mappenavn."/".$filnavn."' target='_blank'>$filnavn</a><br/>";
  }
}
Avatar billede Mik2000 Professor
03. april 2005 - 20:59 #19
Ja detox den virker

Sorry så er det mig der er dum og ikke fik skrevet det hele :(

Forstår ikke helt løsningen (det her "while (false !==" )

Men det virker :)

Mange mange tak for alt jeres tålmodighed
Avatar billede Mik2000 Professor
03. april 2005 - 21:00 #20
Tak til alle tre :)
Avatar billede detox Nybegynder
03. april 2005 - 21:03 #21
Velbekommen.
while (false !== konstruktionen er lavet for at undgå at den hopper ud af whileløkken, hvis du fx har en mappe der hedder "0".
Avatar billede bromer Nybegynder
03. april 2005 - 21:09 #22
Det er blandt andet sådanne nogle konstruktioner der gør PHP sproget grimt
Avatar billede jaw Nybegynder
03. april 2005 - 21:11 #23
Hvis I 2 andre kan, så vil jeg også svare :) Men ja, det kan nemt være tricky at hitte ud af...
Avatar billede jaw Nybegynder
03. april 2005 - 21:12 #24
Ja, det var svare jeg ville...
Avatar billede bromer Nybegynder
03. april 2005 - 21:13 #25
tja, det er ikke fordi det er så tricky det er bare ikke en særlig pæn måde at lave det på. Det har naturligvis ikke noget med den kode detox skrev, men mere den måde PHP er defineret
Avatar billede Mik2000 Professor
03. april 2005 - 21:21 #26
Jeg gav altså jer alle tre pointene for jeg synes det var rigtige huritge svar og kanon hjælp fra jer :)
Avatar billede bromer Nybegynder
03. april 2005 - 21:23 #27
jamen tak for point :)
Avatar billede jaw Nybegynder
03. april 2005 - 22:25 #28
Også mange tak herfra :)
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