Avatar billede qub- Novice
26. januar 2009 - 11:44 Der er 29 kommentarer og
1 løsning

Vis mapper og filer HVER for sig

Hejsa..

Jeg har siddet og rodet lidt med opendir() funktionen, og det er for så vidt os fint nok..

Men mit problem er lidt at jeg skal ha gjort så den KUN viser mapperne i den mappe jeg har valgt... og nedenunder skal der være et lign script som KUN viser filerne i den mappe der er valgt...


Lidt kode at gå ud fra:


if ($handle = opendir('files/pictures')) {
    $i = 1;
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
print '
<td width="285" class="content_mid2">
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<a href="files/pictures/'.$file.'">
<img src="gfx/icons/folder.jpg" width="45" height="45" border="0">
</a>
</td>
<td>
<table border="0" cellpadding="0" cellspacing="0">
<tr>                                    <td>&nbsp;<a href="files/pictures/'.$file.'">'.$file.'</a></td>                                </tr>                                <tr>                                <td>&nbsp;<img src="gfx/icons/delete.gif" width="14" height="14" border="0" alt="Delete" onclick="cf=confirm(\'Er du sikker på du vil slette denne fil?\');if(cf)window.location=\'files/pictures/'.$file.'\'; return false;" style=\'color: #2B6297; cursor:pointer;\'></td>
                                </tr>
</table>
</td>
</tr>
</table>
</td>
';
    }
    if($i%2 == 0)
    {
        echo "</tr><tr>";
    }
    $i++;
    }
    $i--;
    while($i%2 != 0)
    {
        echo "<td>&nbsp;</td>";
    $i++;
    }
    closedir($handle);
}




Håber i forstår spørgsmålet.. og hvis i har tid og lyst, ku det være lækkert hvis der os var en nemmere måde at gøre så den viser de 2 filer pr linie.. :)


På forhånd mange tak!
Avatar billede Slettet bruger
26. januar 2009 - 12:06 #1
Du kunne lave et tjek på om det var en mappe
if(is_dir($file)) {
  $directories[] = $file;
}
Avatar billede qub- Novice
26. januar 2009 - 12:08 #2
jeg har prøvet det.. og så viser den bare slet ik nogle filer overhovedet...
Avatar billede majbom Novice
26. januar 2009 - 12:39 #3
når du løber filer/mapper igennem, så smid mapper i ét array og filer i et andet.
efterfølgende kan du starte med at løbe mappe-arrayet igennem og derefter fil-arrayet.
når du smider dem i arrays, kan du også sortere dem alfabetisk...
Avatar billede tmi Nybegynder
26. januar 2009 - 13:13 #4
$directories = glob('files/pictures/*', GLOB_ONLYDIR);
$files = array_diff(glob('files/pictures/*'), $directories);

foreach ($directories as $d) echo $d."<br />";
foreach ($files as $f) echo " - $f<br />";
Avatar billede Slettet bruger
26. januar 2009 - 13:17 #5
Ja præcis splazz, også det jeg lagde op til.

Er faktisk nogen eksempler her:
http://dk.php.net/readdir
Avatar billede Slettet bruger
26. januar 2009 - 13:17 #6
$dir = 'files/pictures';
$handle = @opendir($dir);

// Empty array to directories
$directories = array();
// Empty array to files
$files = array();
// content string
$content = '<table>';
$content .= '<tr><td colspan="2">Files</td></tr>';

if ($handle) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
          if(is_dir($file)) {
                $directories[] = $file;
          } else {
                  $files[] = $file; 
          }
        }
    } // Ends the while loop
   
    // Sorting in alphabetical order
    asort($directories);
    asort($files);
    $i = 0;
    foreach($files as $file) {
        if(($i % 2) == 0) {
            $content .= '<tr>';   
        }
       
        $content .= '<td>'.$file.'</td>';
       
        if(($i % 2) == 0) {
            $content .= '</tr>';   
        }
    }
   
    $content .= '<tr><td colspan="2">Folders</td></tr>';
    $i = 0;
    foreach($directories as $folder) {
        if(($i % 2) == 0) {
            $content .= '<tr>';   
        }
       
        $content .= '<td>'.$folder.'</td>';
       
        if(($i % 2) == 0) {
            $content .= '</tr>';   
        }   
    }
   
$content .= '</table>';
} else {
    echo 'Error with opendir';   
}
Avatar billede Slettet bruger
26. januar 2009 - 13:18 #7
Noget i den stil men mangler lige en echo $content i bunden inde } else {
Avatar billede Slettet bruger
26. januar 2009 - 13:18 #8
<?PHP
$dir = 'files/pictures';
$handle = @opendir($dir);

// Empty array to directories
$directories = array();
// Empty array to files
$files = array();
// content string
$content = '<table>';
$content .= '<tr><td colspan="2">Files</td></tr>';

if ($handle) {
    while (false !== ($file = readdir($handle))) {
        if ($file != "." && $file != "..") {
          if(is_dir($file)) {
                $directories[] = $file;
          } else {
                  $files[] = $file; 
          }
        }
    } // Ends the while loop
   
    // Sorting in alphabetical order
    asort($directories);
    asort($files);
    $i = 0;
    foreach($files as $file) {
        if(($i % 2) == 0) {
            $content .= '<tr>';   
        }
       
        $content .= '<td>'.$file.'</td>';
       
        if(($i % 2) == 0) {
            $content .= '</tr>';   
        }
    }
   
    $content .= '<tr><td colspan="2">Folders</td></tr>';
    $i = 0;
    foreach($directories as $folder) {
        if(($i % 2) == 0) {
            $content .= '<tr>';   
        }
       
        $content .= '<td>'.$folder.'</td>';
       
        if(($i % 2) == 0) {
            $content .= '</tr>';   
        }   
    }
   
    $content .= '</table>';

    echo $content;
} else {
    echo 'Error with opendir';   
}
?>
Avatar billede Slettet bruger
26. januar 2009 - 13:20 #9
tmi, det din kunne også godt være en mulighed evt. kompineret med mit.
Hvis det er godt nok design til ham - som udgangspunkt.
Avatar billede qub- Novice
26. januar 2009 - 13:31 #10
det ser jo godt nok ud alt sammen.. Og forstår godt hvor det er i vil hen...

Men lige den du smider qtax, der sortere den dem altså ik.. Den smider ALLE filerne.. inkl mapperne under "Files".. og intet under "Folders"... :/
Ved ik lige hvor "fejlen" ligger..
Avatar billede tmi Nybegynder
26. januar 2009 - 13:47 #11
Hvis det skal skrive en tabel ud så prøv noget ala det her:

<?
    $dir = 'files/pictures'; // hvis samme dir som php fil så brug $dir = '.';
   
    $dir = rtrim($dir, "\\/");
    $directories = glob("$dir/*", GLOB_ONLYDIR);
    $files = array_diff(glob("$dir/*"), $directories);
   
    echo "<table style='border-collapse:collapse' border='1' cellpadding='4'>";
    foreach ($directories as $d) echo "<tr><td>MAPPE</td><td><a href='$d'>".basename($d)."</a></td></tr>";
    foreach ($files as $f) echo "<tr><td>FIL</td><td><a href='$f'>".basename($f)."</a></td></tr>";
    echo "</table>";

?>
Avatar billede Slettet bruger
26. januar 2009 - 13:50 #12
Så ved jeg det ikke lige gub-

Ser ikke ud til is_dir eller is_file virker på readdir.

Ellers så er der scandir.

Men tmi's ser ud til at virke godt.
Avatar billede qub- Novice
26. januar 2009 - 13:53 #13
det fungere perfekt tmi..

Det skal ik se sådan ud, men er ligemeget.. kan jeg selv sidde og rode lidt med.
Nu er de ihvertfald sorteret som jeg ville...

Håber det er ok jeg lige venter med at gi points til jeg har fået det hele op og køre...
Men smid lige et par svar alligevel :)
Avatar billede tmi Nybegynder
26. januar 2009 - 13:58 #14
=)
Avatar billede tmi Nybegynder
26. januar 2009 - 13:58 #15
Hov, sådan der.
Avatar billede qub- Novice
26. januar 2009 - 14:37 #16
jeg har lige et tillægsspørgsmål...

Hvad skal jeg tilføje scriptet så den ikke laver fejl, når en mappe er tom.. ? :)
altså hvis vi siger at: $dir = 'files/pictures/test'; er helt tom.. Så kommer den med en masse fejl:

Warning: array_diff() [function.array-diff]: Argument #1 is not an array in /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/popup_pictures.php on line 15

Warning: Invalid argument supplied for foreach() in /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/popup_pictures.php on line 37
Avatar billede Slettet bruger
26. januar 2009 - 14:42 #17
Så sætter du @ foran like this:

<?
    $dir = 'files/pictures'; // hvis samme dir som php fil så brug $dir = '.';
   
    $dir = @rtrim($dir, "\\/");
    $directories = @glob("$dir/*", GLOB_ONLYDIR);
    $files = @array_diff(glob("$dir/*"), $directories);
   
    echo "<table style='border-collapse:collapse' border='1' cellpadding='4'>";
    foreach ($directories as $d) echo "<tr><td>MAPPE</td><td><a href='$d'>".basename($d)."</a></td></tr>";
    foreach ($files as $f) echo "<tr><td>FIL</td><td><a href='$f'>".basename($f)."</a></td></tr>";
    echo "</table>";

?>
Avatar billede qub- Novice
26. januar 2009 - 14:45 #18
det hjalp på den ene fejl.. men der kommer stadig:

Warning: Invalid argument supplied for foreach() in /customers/nystedvandsport.dk/nystedvandsport.dk/httpd.www/ny/popup_pictures.php on line 37
Avatar billede tmi Nybegynder
26. januar 2009 - 14:50 #19
Ret disse to linjer:

    $directories = glob("$dir/*", GLOB_ONLYDIR);
    $files = array_diff(glob("$dir/*"), $directories);

til:

    $directories = glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = array_diff(glob("$dir/*"), $directories) or $files = array();
Avatar billede tmi Nybegynder
26. januar 2009 - 14:51 #20
alternativt kan du også bare nøjes med denne ændring:

    foreach ($directories as $d) echo "<tr><td>MAPPE</td><td><a href='$d'>".basename($d)."</a></td></tr>";
    foreach ($files as $f) echo "<tr><td>FIL</td><td><a href='$f'>".basename($f)."</a></td></tr>";

til:

    if ($directories) foreach ($directories as $d) echo "<tr><td>MAPPE</td><td><a href='$d'>".basename($d)."</a></td></tr>";
    if ($files) foreach ($files as $f) echo "<tr><td>FIL</td><td><a href='$f'>".basename($f)."</a></td></tr>";
Avatar billede tmi Nybegynder
26. januar 2009 - 14:52 #21
Den første virker i øvrigt ikke, men gør det med at tilføje if, det er sådan man bør gøre.
Avatar billede tmi Nybegynder
26. januar 2009 - 14:55 #22
Nej vent, jeg tænder lige for min hjerne.

Ret disse to linjer:

    $directories = glob("$dir/*", GLOB_ONLYDIR);
    $files = array_diff(glob("$dir/*"), $directories);

til:

    $directories = glob("$dir/*", GLOB_ONLYDIR) or $directories = array();
    $files = ($files = glob("$dir/*")) ? array_diff($files, $directories) : array();
Avatar billede qub- Novice
26. januar 2009 - 15:05 #23
i har været helt kanone

qtax.. du må os gerne lave et svar.. så i kan dele points..

Jeg prøver og lege lidt med at slette filer, mapper osv.. Så må vi se hvorn det går, men i har jo svaret på det jeg spurgte om i denne her tråd så må hellere lukke den..
Med mindre i vil svare på et ALLER sidste spørgsmål :)

Hvad er funktionen for at gå ind i en $_GET som fx indeholder files/pictures/test/123

og så fjerne den sidstnævnte mappe hver gang, så der står: files/pictures/test/ tilbage..

Igen, tusind tak for al hjælpen
Avatar billede tmi Nybegynder
26. januar 2009 - 15:23 #24
dirname("files/pctures/test/123");

du sletter med unlink:
unlink("files/pctures/test/123");
Avatar billede qub- Novice
26. januar 2009 - 15:30 #25
Det var nu ik sådan jeg mente.. :)

Men har os fundet et fint script på nettet til at slette mapper, selvom der er indhold..

Er fordi jeg skal ha en "tilbage" funktion.. når jeg går ind i diverse mapper..
Må vel kigge manualen igennem :)
Avatar billede tmi Nybegynder
26. januar 2009 - 15:43 #26
Men så er det vel også dirname du har brug for ;-)

<a href='./?dir=".dirname($_GET['dir'])."'>Tilbage</a>
Avatar billede qub- Novice
26. januar 2009 - 16:04 #27
heh du misforstår.. faktisk intet med dir at gøre.. Jeg har lagt den fulde dir ind i en $_GET['dir'].. altså : $_GET['dir'] = files/pictures/test/123

Så skal jeg finde en måde at gå ind i den GET, og fjerne den sidstnævnte mappe, og poste resultat.. :)
Avatar billede tmi Nybegynder
26. januar 2009 - 16:20 #28
Jeg forstår ikke hvad du mener med fjerne sidstnævnte mappe så.
Men jeg ved at, hvis du skriver (og sådan forstår jeg det du vil):
<?
echo dirname('files/pictures/test/123');
?>
Så får du: files/pictures/test, og der kan du så tage dirname igen for at få file/pictures, ellers må du lige give nogle eksempler på hvad du får ind og hvad du forventer at få ud.
Avatar billede qub- Novice
26. januar 2009 - 16:26 #29
Det fungere perfekt med dirname..

Jeg kan kun takke tusind gange for hjælpen.. :)
Jeg har næsten allerede et velfungerende galleri system, med alt hvad det indebærer.. :P
Avatar billede Slettet bruger
27. januar 2009 - 10:25 #30
Nej ellers tak, synes ikke jeg gav dig et ordenligt svar, så vil ikke be om :o)
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