Avatar billede marzman Nybegynder
25. juni 2005 - 22:13 Der er 29 kommentarer og
1 løsning

hente filer i mappe

Hej eksperter...

Jeg er igang med at lave mit eget billede galleri, og har nu brug for en funktion som laver en visual liste over filer i en mestemt mappe.

Så den derfra kan putte billederne ind i en database med så sætter gallerierne sammen.

Hvordan vil den funktion komme til at se ud ???
Avatar billede claus_joergensen Nybegynder
25. juni 2005 - 22:18 #1
tjah, afhænger af din version af php, du kan bruge

www.php.net/opendir eller www.php.net/glob
Opendir skal så loops igennem, ligesom glob.

Finder lige eksemplerne
Avatar billede claus_joergensen Nybegynder
25. juni 2005 - 22:19 #2
Avatar billede marzman Nybegynder
25. juni 2005 - 22:20 #3
opendir skulle jeg mene...
Avatar billede bromer Nybegynder
25. juni 2005 - 22:20 #4
Der er flere metoder. Du kan liste alle filerne ved brug af opendir og readdir funktionerne [1,2]. Et eksempel fra manualen er dette:

<?php
$dir = "/etc/php5/";

// Open a known directory, and proceed to read its contents
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
          echo "filename: $file : filetype: " . filetype($dir . $file) . "\n";
      }
      closedir($dh);
  }
}
?>

Du kan også vælge at bruge glob() [3]. Du kan lave din kode rigtig hurtig med glob, men af en eller anden grund er jeg ret glad for at bruge de gode gamle funktioner.

[1] http://dk2.php.net/opendir
[2] http://dk2.php.net/readdir
[3] http://dk2.php.net/glob
Avatar billede bromer Nybegynder
25. juni 2005 - 22:20 #5
Der var jeg godt nok ikke så hurtig :)
Avatar billede marzman Nybegynder
25. juni 2005 - 22:23 #6
claus -> den $mappe er der http://-stien eller unix-patchen
Avatar billede claus_joergensen Nybegynder
25. juni 2005 - 22:24 #7
hvis scriptet ligger i /www/ og billederne i /www/billeder/ skal $mappe = "billeder";
Avatar billede claus_joergensen Nybegynder
25. juni 2005 - 22:26 #8
bromer , jeg snyder jo også :) prelavet eksempler.

Svar fra mig kommer her.
Avatar billede marzman Nybegynder
25. juni 2005 - 22:31 #9
men hvordan gør jeg så, så den automatisk lægger deres stier ind i min database...
Avatar billede bromer Nybegynder
25. juni 2005 - 22:31 #10
claus_joergensen: Hehe :)

marzman: Spørgsmålet har været stillet rigtig mange gange før, så selvsom der blev svaret hurtigt så ville det nok været hurtigere for dig at søge i PHP kategorien :)
Avatar billede bromer Nybegynder
25. juni 2005 - 22:32 #11
marzman: Er det noget der skal gøres een gang eller noget der skal opdateres over tid?
Avatar billede marzman Nybegynder
25. juni 2005 - 22:32 #12
men er der så en som kan finde det til mig, fordi jeg kan sq ikke selv lige finde det...
Avatar billede claus_joergensen Nybegynder
25. juni 2005 - 22:33 #13
marzman, du tilføjer noget SQL :) Hvis det er mysql bruger du www.php.net/mysql_query

Du skal huske at vi aner ikke hvordan din sql struktur ser ud, og jeg synes også det virker ret underligt at bruge både fileliste i php OG mysql.

Kan du ikke uddbyde noget mere hvordan din struktur er ?
Avatar billede bromer Nybegynder
25. juni 2005 - 22:36 #14
marzman: Den normale tilgang til dit problem er et lidt andet sted. Normalt laver jeg en databasestruktur der minder om denne:

create table media {
m_id integer auto_increment primary key,
m_path varchar(250),
m_width integer,
m_height integer
);

Så laver jeg en upload feature, hvor jeg lægger billedet i en mappe og indsætter en række i tabellen, hvor jeg smider mappenavn . filenavn ind i m_path.
Avatar billede marzman Nybegynder
25. juni 2005 - 22:36 #15
altså jeg har 2 databaser: 1 som er med kategorier og en anden som er med de filer som lægger i kategorierne.

Min fil db ser sådan ud:

navn: (fil-navn.jpg)
cat: (katagori)
Avatar billede marzman Nybegynder
25. juni 2005 - 22:39 #16
bromer: ja men mit problem er at jeg godt vil have FTP opload så jeg ikke skal sidde med de html fil upload shit ting. ;)
Avatar billede bromer Nybegynder
25. juni 2005 - 22:48 #17
Du kan jo så bruge den kode jeg pastede tidligere noget i følgende stil:

<?php
$dir = "/path/to/the/place/where/you/have/your/ftp/directory";

function scan_dir($dir) {
  // Open a known directory, and proceed to read its contents
  if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($dir . "/" . $file) == 'dir') {
              if (!($file == '.' || $file == '..') {
                scan_dir($dir . "/" . $file);
              }
            } else {
                if (mysql_result(mysql_query(sprintf("select count(1) from yourtable where navn = '%s'",$dir . "/" . $file)),0) == 0) {
                  mysql_query(sprintf("INSERT INTO yourtable (navn) values ('%s')",$dir . "/" . $file));
            }
        }
        closedir($dh);
    }
  }
}

scan_dir($dir);
?>
Avatar billede bromer Nybegynder
25. juni 2005 - 22:50 #18
Jeg har ikke lige undersøgt koden for fejl etc, men det burde virke.. agtigt
Avatar billede marzman Nybegynder
25. juni 2005 - 23:00 #19
nopp, paste i line 13:


              if (!($file == '.' || $file == '..') {
Avatar billede bromer Nybegynder
25. juni 2005 - 23:02 #20
nu er det jo ikke meningen at jeg skal skrive hele din kode, så jeg skrev det bare hurtigt her i bufferen. Men linjen:

if (!($file == '.' || $file == '..') {

skal rettes til:

if (!($file == '.' || $file == '..')) {
Avatar billede marzman Nybegynder
25. juni 2005 - 23:05 #21
nej nu er det bare i slut:

http://marzman.dk/galleri/test.php

source:

<?php

include("/customers/marzman.dk/marzman.dk/httpd.www/dbconnect.php");

$dir = "/customers/marzman.dk/marzman.dk/httpd.www/images";

function scan_dir($dir) {
  // Open a known directory, and proceed to read its contents
  if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($dir . "/" . $file) == 'dir') {
                if (!($file == '.' || $file == '..')) {
                scan_dir($dir . "/" . $file);
              }
            } else {
                if (mysql_result(mysql_query(sprintf("select count(1) from galleri_pics where navn = '%s'",$dir . "/" . $file)),0) == 0) {
                  mysql_query(sprintf("INSERT INTO galleri_pics (navn) values ('%s')",$dir . "/" . $file));
            }
        }
        closedir($dh);
    }
  }
}

scan_dir($dir);


?>
Avatar billede bromer Nybegynder
25. juni 2005 - 23:52 #22
som jeg nævnte tidligere er det ikke mit job at skrive din kode. Jeg skrev jo koden her i ekspertens textarea uden at tage hensyn til syntax. Det burde være muligt for dig at rette de parse errors min kode giver dig.
Avatar billede marzman Nybegynder
26. juni 2005 - 00:01 #23
så skulle du jo ikke have haft hjulpet mig første gang. vel?
Avatar billede bromer Nybegynder
26. juni 2005 - 00:03 #24
hvad mener du med det?
Avatar billede marzman Nybegynder
26. juni 2005 - 00:11 #25
ja du rettede den første fejl men du vil ikke hjælpe med de andre der var i det script. lidt mærkeligt synes jeg.
Avatar billede bromer Nybegynder
26. juni 2005 - 00:19 #26
Læg mærke til at jeg allerede der skrev at det faktisk ikke var noget jeg synes jeg burde. Det har ikke noget af gøre med at jeg ikke gider hjælpe dig for jeg synes egentlig jeg har været hjælpsom fra starten.

Eksperten er her for at udviklere kan få konstruktiv kritik til deres udviklingsmetoder, og for at erfarne udviklere kan dele deres viden og erfaringer. De fleste af os der sidder herinde og hjælper har jo private jobs så vi bruger det meste af dagen på at skrive andres kode. Vi er her for det første fordi vi gerne vil hjælpe folk og for det andet fordi der med jævne mellemrum bliver stillet nogle rigtig interessante spørgsmål, hvor løsningen ikke er så åbenlys som ved andre problemer.

Når man har siddet fast på eksperten i en række år finder man hurtigt ud af at de brugere, der får hele koden udleveret har langt sværre ved at udvikle sig end folk der får hints til at løse opgaven selv.
Avatar billede marzman Nybegynder
26. juni 2005 - 00:26 #27
problemet er at jeg ikke selv kan se hvad fejlen i denne kode er, hvis jeg havde mere tjek på det med opendir koden så ville jeg med glæde have rette den selv. Men desværre nej. Jeg ken ikke lige selv fikse den.
Avatar billede bromer Nybegynder
26. juni 2005 - 00:38 #28
Når jeg kører filen får jeg:

Parse error: parse error, unexpected $ in /home/bromer/test.php on line 27

det viser sig at være meget simpelt fordi jeg ikke har afsluttet funktionen. Når dette er gjort får jeg en fejl med at filen jeg tilgår ikke findes og det er jo meget klart da jeg ikke har samme filstruktur som du.. prøv med følgende kode:

<?php

include("/customers/marzman.dk/marzman.dk/httpd.www/dbconnect.php");

$dir = "/customers/marzman.dk/marzman.dk/httpd.www/images";

function scan_dir($dir) {
  // Open a known directory, and proceed to read its contents
  if (is_dir($dir)) {
    if ($dh = opendir($dir)) {
        while (($file = readdir($dh)) !== false) {
            if (filetype($dir . "/" . $file) == 'dir') {
                if (!($file == '.' || $file == '..')) {
                scan_dir($dir . "/" . $file);
              }
            } else {
                if (mysql_result(mysql_query(sprintf("select count(1) from galleri_pics where navn = '%s'",$dir . "/" . $file)),0) == 0) {
                  mysql_query(sprintf("INSERT INTO galleri_pics (navn) values ('%s')",$dir . "/" . $file));
            }
        }
        closedir($dh);
    }
  }
}
}

scan_dir($dir);
Avatar billede marzman Nybegynder
26. juni 2005 - 10:11 #29
øv, nu kommer den med en helt anden fejl. Det er noget med dit while, måske problemer med at åbne mappen...

Warning: readdir(): 3 is not a valid Directory resource in /customers/marzman.dk/marzman.dk/httpd.www/galleri/test.php on line 11

stadig http://marzman.dk/galleri/test.php
Avatar billede marzman Nybegynder
28. juni 2005 - 19:39 #30
jeg brugte glob istedet for og barklund hjalp mig med det...

undskyld jeg brugte jeres tid.
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