Avatar billede webmercial Nybegynder
14. oktober 2004 - 17:36 Der er 41 kommentarer og
2 løsninger

Vis indhold af mappe på server

Jeg leder efter et script der kan

1: Gå hen og læse indholdet af en mappe, enten relativt ('/mappe') eller ('http:www.enhjemmeside.dk/mappe')

2: Vise hvilke filer der er i mappen, enten i en variabel, i et .txt-dokument der skrives på min server eller i en tabel i min mySQL database...

Det burde være nemt, men har svært ved at finde det...

VH Jesper
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 17:50 #1
function getFiles() {
    $files = array();
    $handle = opendir("folder");
    while($file = readdir($handle)) {
        if($file != '.' && $file != '..') {
            array_push($files, $file);
        }
    }
    asort($files);
    return $files;
}
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 17:52 #2
Den returnerer et array med navnene på filerne i mappen "folder" (undermappe til php-dokumentet)
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 17:54 #3
Du kan ikke lave listing af på en URL, så vidt jeg ved.

Og så bør while linien se sådan her ud:
while (false !== ($file = readdir($handle))) {
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 17:58 #4
Hvorfor ? Den virker fint som den står skrevet ! Du skriver jo det samme som mig, bare på en mere besværlig måde !
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 17:59 #5
og !== tror jeg næppe vil blive accepteret af PHP ?!
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:01 #6
Jeg holder mig bare til manualen...
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:03 #7
Eksempel 1 fra manualen. (Var ikke for at nedrakke din kode, bare en oplysning)

<?php
// Note that !== did not exist until 4.0.0-RC2

if ($handle = opendir('/path/to/files')) {
  echo "Directory handle: $handle\n";
  echo "Files:\n";

  /* This is the correct way to loop over the directory. */
  while (false !== ($file = readdir($handle))) {
      echo "$file\n";
  }

  /* This is the WRONG way to loop over the directory. */
  while ($file = readdir($handle)) {
      echo "$file\n";
  }

  closedir($handle);
}
?>
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:09 #8
Det giver ingen mening. Indholdet i parantesen skal jo bare være true, for at løkken eksekveres igen... Det er jo livrem og seler og dobbelt-konfekt !! Hvad er det for en manual ?
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:10 #9
php.net/readdir
(Det jo ikke mig der laver reglerne :))
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:16 #10
hmmm , ok - det er for at forebygge hvis en fil eller directory hedder 0. Det sker nok ikke så tit (med filer i hvert fald), men ok...

function getFiles() {
    $files = array();
    $handle = opendir("folder");
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            array_push($files, $file);
        }
    }
    asort($files);
    return $files;
}

hva så der ;)
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:18 #11
Skal den også kigger i undermapper ?
Avatar billede webmercial Nybegynder
14. oktober 2004 - 18:23 #12
Hej, to ting:

Den array skal sendes (eller hentes fra Flash). Men bare for at være sikker på at det virker, kan i ikke lige fortælle mig hvordan jeg også viser arrayen i samme PHP-script. Koden ligenu giver en blank side.

Vh Jesper
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:24 #13
$array = getFiles();
foreach ($array AS $var) {
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:25 #14
Woops
$array = getFiles();
foreach ($array AS $var) {
echo $var."<br />\n";
}
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:27 #15
Så skal flash have det på denne måde:

function printFiles($mappenavn) {
    $handle = opendir($mappenavn);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}

printFiles("filmappe");
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:30 #16
Så siden skriver fil1=filnavn1.jpg&fil2=filnavn2.txt& ...og så videre

I flash skal du:

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
      trace("filnavnene er hentet");
  } else {
      trace("det gik galt");
  }
}
filer.load("phpside.php");

Så har du filnavnene i din _root som fil1, fil2 osv.
Avatar billede webmercial Nybegynder
14. oktober 2004 - 18:31 #17
Det virker!

Legende: "Så skal flash have det på denne måde" - er det PHP'en der generer en variabel "printFiles" flash henter...?
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:34 #18
Nej, den udskriver filnavnene, som jeg har beskrevet. printFiles er bare navnet på funktionen, der udskriver filerne.
Avatar billede cmau Nybegynder
14. oktober 2004 - 18:34 #19
hvis det bare var php, kunne du ellers bare have gjort sådan her:

<?php
echo '<p align="center">';
$mappe = "MAPPENAVN";
$kom_i_gang = opendir(''.$mappe.'');
while (false !== ($fil = readdir($kom_i_gang))) {
    if ($fil != '.' && $fil != '..') {
        echo '<a href="'.$mappe.'/'.$fil.'" target="_blank">'.$fil.'</a><br>';
    }
}
echo '</p>';
closedir($kom_i_gang);
?>
Avatar billede webmercial Nybegynder
14. oktober 2004 - 18:44 #20
<?



function getFiles() {
    $files = array();
    $handle = opendir("folder");
    while($file = readdir($handle)) {
        if($file != '.' && $file != '..') {
            array_push($files, $file);
        }
    }
    asort($files);
    return $files;
}

$array = getFiles();
foreach ($array AS $var) {
echo $var."<br />\n";
}

function printFiles($mappenavn) {
    $handle = opendir($mappenavn);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}

printFiles("filmappe");


?>

----------------------

Giver fejl i min php.

Flash siger : 'filnavnene er hentet' (er lidt usikker på hvad variablen i den dynamiske tekstboks skal være).

---------------------

(Det er min første gang som bruger på eksperten)
Avatar billede hmortensen Nybegynder
14. oktober 2004 - 18:52 #21
Du skal kun bruge det her:

function printFiles($mappenavn) {
    $handle = opendir($mappenavn);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}

printFiles("filmappe");
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 18:59 #22
filnavnene ligger i _root som fil1, fil2 osv.

i = 1;
_root.tekst = "";
while(i < 100) {
  _root.tekst += _root["fil" + i] + newline;
  i++;
}

så skal variablen i tekstfeltet være _root.tekst
Avatar billede webmercial Nybegynder
14. oktober 2004 - 19:43 #23
1: Der en mappe i mit directory jeg kalder 'mappe', den indeholder to filer.

2: En phpfil der hedder 'vismappe2.php', består af

<?
function printFiles($mappe) {
    $handle = opendir($mappe);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}

printFiles("folder");

$array = printFiles();
foreach ($array AS $var) {
echo $var."<br />\n";
}
?>

3: En flashfil, på tidslinjen ligger der:

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
      trace("filnavnene er hentet");
  } else {
      trace("det gik galt");
  }
}
filer.load("http://www.minhjemmeside.dk/vismappe2.php");

i = 1;
_root.tekst = "";
while(i < 100) {
  _root.tekst += _root["fil" + i] + newline;
  i++;
}

Teksboksen skal vise variablen '_root.tekst'

Resultat:

'filerne er hentet' men 4 * 'undefined' i tekstboksen.

...
Avatar billede webmercial Nybegynder
14. oktober 2004 - 19:48 #24
lægger gerne mange flere points i det...
Avatar billede baitianlong Nybegynder
14. oktober 2004 - 20:15 #25
php:

<?
function printFiles($mappe) {
    $handle = opendir($mappe);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}
printFiles("mappe");
?>

ikke mere end det... så virker det :)
Avatar billede webmercial Nybegynder
19. oktober 2004 - 01:50 #26
Klaveret spiller ikke som det skal.

-----------------------------------
1: I roden af mit directory har jeg en mappe der hedder 'mappe', den indeholder p.t. to (tilfældige) filer.

2: I roden har jeg en PHP-fil der hedder 'vismappe.php', den består af:

<?
function printFiles($mappe) {
    $handle = opendir($mappe);
    $tal = 0;
    while($file = readdir($handle) !== false) {
        if($file != '.' && $file != '..') {
            $tal++;
            print("fil".$tal."=".$file."&");
        }
    }
}
printFiles("mappe");
?>

3: Lokalt har jeg en flashfil der indeholder følgende kode på frame 1:

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
      trace("filnavnene er hentet");
  } else {
      trace("det gik galt");
  }
}
filer.load("http://www.webmercial.dk/vismappe.php");

i = 1;
_root.tekst = "";
while(i < 100) {
  _root.tekst += _root["fil" + i] + newline;
  i++;
}

På stagen er der en dynamisk tekstboks som har fået tildelt variablen '_root.tekst'

-----------------------------------

Når jeg tester flashfilen får jeg hver gang:
undefined
undefined

og 'filnavnene er hentet' i trace-vinduet (uanset om jeg ændrer på antal filer i 'mappe').

T

Ak og ve. Livet er en jammerdal.
Avatar billede webmercial Nybegynder
19. oktober 2004 - 02:10 #27
Der er i øvrigt en lækker flash filbrowser på http://www.illogicz.com/blog/000022.php.
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 13:43 #28
while(($file = readdir($handle)) !== false) {

...der manglede lige et par paranteser :) Prøv at køre den php side uden at bruge flashen, og se hvad den skriver..
Avatar billede webmercial Nybegynder
19. oktober 2004 - 13:58 #29
Virker fint i PHP'en ligenu: http://www.webmercial.dk/vismappe.php

Men Flash køber den ikke (undefined * ca. 20)
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:03 #30
Er det ikke noget med at den mangler et '&text=' i PHP'en?
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:08 #31
Du skriver "lokalt har jeg en flash..." Du har normalt ikke adgang til at læse indholdet af en mappe udenfor domænet! Flashen skal uploades til samme webhotel :)

og så put forløkken ind i if(success) ...

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
    i = 1;
    _root.tekst = "";
    while(i < 100) {
      _root.tekst += _root["fil" + i] + newline;
      i++;
    }
  } else {
      trace("det gik galt");
  }
}
filer.load("http://www.webmercial.dk/vismappe.php");
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:11 #32
En anden ting er at din php side jo skriver "filer1=...&filer2" Men flashen leder i _root efter variabler, der hedder fil1, fil2 osv. Der skal stå fil begge steder, eller filer begge steder. Klart nok at det ikke virker :)
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:18 #33
Dette er AS i 'vismappe.swf' (ligger lige ved siden af vismappe.php):

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
    i = 1;
_root.tekst = "";
while(i < 100) {
  _root.tekst += _root["fil" + i] + newline;
  i++;
}
  } else {
      trace("det gik galt");
  }
}
filer.load("http://www.webmercial.dk/vismappe.php");

--------------------------------
Kan ses på:http://www.webmercial.dk/vismappe.swf
--------------------------------
Har forsøgt med relativ sti:
filer.load("vismappe.php");
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:21 #34
Ret det med fil/filer, så der står det samme ! :)
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:25 #35
OK: AS i vismappe.swf er rettet:

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
    i = 1;
_root.tekst = "";
while(i < 100) {
  _root.tekst += _root["filer" + i] + newline;
  i++;
}
  } else {
      trace("det gik galt");
  }
}
filer.load("http://www.webmercial.dk/vismappe.php");

------------------------------

'filer' bruges i både PHP og Flash nu.
Kan ses på:http://www.webmercial.dk/vismappe.swf
------------------------------

Men Flash køber den ikke (undefined * ca. 20)
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:28 #36
prøv lige at sætte tallet ned til 4 i while(i<4) i AS'et
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:29 #37
OK - resultat ses her (undefined *3):

http://www.webmercial.dk/vismappe.swf
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:35 #38
Det er mystisk. Hmm, prøv at trace(_root.filer1) lige efter if(success)
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:37 #39
'undefined'...
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:39 #40
Har før været ude for at importere variabler i Flash fra et ekstern tekstdokument, og skulle begynde variabelrrækken med '&text='
Avatar billede baitianlong Nybegynder
19. oktober 2004 - 14:41 #41
Jeg tror ikke det er det, men jeg har et andet forslag. Jeg tror nemlig at resultatet er cached. Derfor skriv:

filer.load("http://www.webmercial.dk/vismappe.php?tal="+random(10000));
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:46 #42
OK, men har lige tjekket på anden PC:

filer = new LoadVars();
filer.onLoad = function(success) {
  if(success) {
    i = 1;
_root.tekst = "";
while(i < 4) {
  _root.tekst += _root["filer" + i] + newline;
  i++;
  trace(_root.filer1)
}
  } else {
      trace("det gik galt");
  }
}

filer.load("http://www.webmercial.dk/vismappe.php?tal="+random(10000));

-------------------------------------
http://www.webmercial.dk/vismappe.swf
Avatar billede webmercial Nybegynder
19. oktober 2004 - 14:59 #43
Kigger herovre, tror svaret er at finde der...

http://www.actionscript.org/forums/archive/index.php3/t-42892.html
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