map lezen, wanneer mappen worden gevonden, link van die map maken

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Peps from Yesterday

Peps from Yesterday

05/08/2010 15:28:53
Quote Anchor link
Hoi,

met het onderstaande script lees de inhoud van een map. de foto's en mappen worden nu correct weergegeven.

nu wil ik graag een functie toevoegen dat wanneer een map (in de map) wordt aangetroffen dit een link wordt die linkt naar de eerste foto die erin staat, is dit mogelijk?

alvast bedankt!
 
PHP hulp

PHP hulp

26/12/2024 02:54:28
 
Milo S

Milo S

05/08/2010 17:33:18
Quote Anchor link
welk onderstaande script?
 
Jurrian Nijland

Jurrian Nijland

05/08/2010 19:08:54
Quote Anchor link
Uhh, aha. Script ziet er goed uit. Als je nu is in die map in de map een index bestand maakt waar de eerste foto in staat..
 
Peps from Yesterday

Peps from Yesterday

06/08/2010 13:20:11
Quote Anchor link
dit script:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<? $dir = opendir('cms/uploaded/images/');
echo '<ul>';
while ($read = readdir($dir))
{

if ($read!='.' && $read!='..')
{

echo '<li><a rel="lightbox-test" href="cms/uploaded/images/'.$read.'" >'.$read.'</a></li>';
}
}

echo '</ul>';
closedir($dir); ?>


Toevoeging op 06/08/2010 13:22:05:

kan dat niet via php? dat ie vast leest wat er in de map zit oid?
Gewijzigd op 06/08/2010 13:20:38 door Peps from Yesterday
 
Johan Dam

Johan Dam

06/08/2010 13:44:23
Quote Anchor link
PHP kan prima bestanden lezen in een map,
(al adviseer ik je scandir, werkt net dat beetje makkelijker, maar vooruit)

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
...
if(is_dir($read)){
    $lijst = scandir($read);
    foreach($lijst as $bestand){
        echo "<li><a...";
    }
}
...

?>
 
Peps from Yesterday

Peps from Yesterday

06/08/2010 14:20:38
Quote Anchor link
thanks johan!
maar waar moet ik die code nou invoegen? ik snap het niet..
 
Peps from Yesterday

Peps from Yesterday

09/08/2010 17:45:47
Quote Anchor link
het onderstaande script doet bijna wat ik wil, het geeft bestanden in subdirectories weer. nu wil ik dit echter beperken tot 1 bestand (foto) per subdirectory die gevonden wordt, is dit mogelijk?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
$dir
= "cms/uploaded/images/";
function
ListFiles($dir) {

    if($dh = opendir($dir)) {

        $files = Array();
        $inner_files = Array();

        while($file = readdir($dh)) {
            if($file != "." && $file != ".." && $file[0] != '.') {
                if(is_dir($dir . "/" . $file)) {
                    $inner_files = ListFiles($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files);
                }
else {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }


        closedir($dh);
        return $files;
    }
}



foreach (ListFiles($dir) as $key=>$file){
    echo "<a href='$file' rel='lightbox-mobile' class='page'>'$file'</a><br />";
}
  ?>
 
P Lekensteyn

P Lekensteyn

09/08/2010 17:56:26
Quote Anchor link
Dit voldoet aan jouw eisen, ik heb het niet getest, maar het zou het moeten doen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
$dir
= 'cms/uploads/images/';
$nodes = scandir($dir);
foreach($nodes as $node){
    if($node[0] == '.'){
        //verberg bestanden en mappen die met een punt beginnen, evenals . en ..
        continue;
    }

    $file = '';
    if(is_dir($node)){
        $nodes_in_sub = scandir("$dir/$node");
        foreach($nodes_in_sub as $node_in_sub){
            if($node_in_sub[0] != '.' && is_file("$dir/$node_in_sub")){//gebruik eerste bestand
                $file = "$node/$node_in_sub";
                break;
            }
        }
    }

    elseif(is_file($node)){
        $file = $node;
    }

    if($file != '' && is_readable($file)){
        // als het bestand te lezen is
        printf('<a href="%1$s" rel="lightbox-mobile" clsss="page">%1$s</a>', $file);
    }
}

?>
Gewijzigd op 09/08/2010 17:56:52 door P Lekensteyn
 
Peps from Yesterday

Peps from Yesterday

09/08/2010 18:10:57
Quote Anchor link
Thanks peter! krijg nu echter deze foutmelding:

Fatal error: Call to undefined function: scandir() in /home/xxxxx.nl/public_html/xxxx.nl/lenny2/index.php on line 102

Toevoeging op 09/08/2010 18:52:18:

weet iemand hier een oplossing voor?
 
Mark Beets

Mark Beets

09/08/2010 20:30:02
Quote Anchor link
Peps .. weet niet of je maar 1 map diep moet .. anders kan je het natuurlijk iets aanpassen .. zie ook http://php.net/manual/en/class.directoryiterator.php ..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// p_sPath = main dir
// functie gaat 1 map diep.
// doet de eerste file die leesbaar is terug geven.

//maindir/map1/image1.jpg
//maindir/map2/image2.jpg
    
function filesInDir($p_sPath)
{        
    if(is_dir($p_sPath))
    {    
        $p_aDirFiles = null;            
        foreach (new DirectoryIterator($p_sPath) as $fileInfo)
        {
            if(!$fileInfo->isDot() and $fileInfo->isDir())
            {                
                foreach (new DirectoryIterator($p_sPath.'/'.$fileInfo->getFilename()) as $fileInfo2)
                {
                    if(!$fileInfo2->isDot() AND $fileInfo2->getFilename() != 'Thumbs.db' and $fileInfo2->isReadable() ){
                    $p_aDirFiles[] = $fileInfo->getFilename().'/'.$fileInfo2->getFilename();continue; }
                }                
            }                
        }    
        return $p_aDirFiles;
    }
    return false;
}

foreach(filesInDir('maindir/') as $file)
{
    printf('<a href="%1$s" rel="lightbox-mobile" clsss="page">%1$s</a>', 'map1/'.$file);
}
Gewijzigd op 09/08/2010 20:53:25 door Mark Beets
 
Peps from Yesterday

Peps from Yesterday

09/08/2010 20:39:30
Quote Anchor link
Thanks. Hij moet waarschijnlijk 2 mappen diep, in de map "images" zitten de mappen met de albums.

heb het script geprobeerd, moet nergens het pad naar de folder worden ingevoerd?

ik krijg online niks te zien,
offline deze foutmelding:
Warning: Invalid argument supplied for foreach() in D:\My Dropbox\Websites\xxxxxx.nl\site2\site\index.php on line 109
 
Mark Beets

Mark Beets

09/08/2010 20:56:32
Quote Anchor link
Peps .. maybe stond dat een beetje krom .. line 29 maindir/ = tot aan die 1 map diep .. de rest zoekt ie zelf .. zie line 5 en 6

Als hiermee je probleem niet opgelost is .. laat even je mappen structuur zien..
Gewijzigd op 09/08/2010 20:56:50 door Mark Beets
 
Peps from Yesterday

Peps from Yesterday

09/08/2010 21:14:07
Quote Anchor link
mapstructuur:

de index.php (dan staat jouw code in) in dezelfde map als de index.php staat de map cms daarin de map uploaded daarin de map images, hierin de mappen met de albums

dus: cms/uploaded/images/ map1+map2+map3 enz
(de images map is dus de map die doorzocht moet worden naar mappen met foto's!
Gewijzigd op 09/08/2010 21:14:33 door Peps from Yesterday
 
Mark Beets

Mark Beets

09/08/2010 21:40:06
Quote Anchor link
Peps from Yesterday op 09/08/2010 21:14:07:
mapstructuur:

de index.php (dan staat jouw code in) in dezelfde map als de index.php staat de map cms daarin de map uploaded daarin de map images, hierin de mappen met de albums

dus: cms/uploaded/images/ map1+map2+map3 enz
(de images map is dus de map die doorzocht moet worden naar mappen met foto's!


line 29 zou dan zo moeten worden. Dat heb je vast zelf ook al geprobeerd, gok ik zo.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
foreach(filesInDir('cms/uploaded/images/') as $file)
or
foreach(filesInDir('cms/uploaded/images') as $file)



even zoeken ... hebbes .. gebruik zelf dit altijd
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
# Set Constants SEPARATOR: \
define ('DIRSEP', DIRECTORY_SEPARATOR); //windows or unix
define ('DIRURLLink', '/');
# SET boottrap
$applicationPath = realpath(dirname(__FILE__) . DIRSEP . '../..' . DIRSEP) . DIRSEP;
define ('SitePath', $applicationPath);     


Line 29
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
foreach(filesInDir(SitePath.'cms/uploaded/images/') as $file)


Het script werkt bij mij wel BTW.
Je gebruikt wel PHP 5.1 of hoger?

cms/uploaded/images/map1
cms/uploaded/images/map2
cms/uploaded/images/map3
Gewijzigd op 09/08/2010 21:42:01 door Mark Beets
 
P Lekensteyn

P Lekensteyn

09/08/2010 22:00:31
Quote Anchor link
Peps from Yesterday op 09/08/2010 18:10:57:
Thanks peter! krijg nu echter deze foutmelding:

Fatal error: Call to undefined function: scandir() in /home/xxxxx.nl/public_html/xxxx.nl/lenny2/index.php on line 102

Toevoeging op 09/08/2010 18:52:18:

weet iemand hier een oplossing voor?


is scandir toegestaan, en gebruik je PHP 5 of hoger?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php phpinfo(); ?>

Kijk bij disabled_functions of scandir erbij staat (moet niet), en of de versie 5 en hoger is.
 
Peps from Yesterday

Peps from Yesterday

09/08/2010 22:13:25
Quote Anchor link
thanks mark.
op m'n localhost heb ik:PHP Version 5.1.4
mijn provider gebruikt: PHP Version 4.4.9-0.dotdeb.1

zo ziet mijn code er nu uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
                          # Set Constants SEPARATOR: \
                          define ('DIRSEP', DIRECTORY_SEPARATOR); //windows or unix
                          define ('DIRURLLink', '/');
                          # SET boottrap
                          $applicationPath = realpath(dirname(__FILE__) . DIRSEP . '../..' . DIRSEP) . DIRSEP;
                          define ('SitePath', $applicationPath);
                          // p_sPath = main dir
                          // functie gaat 1 map diep.
                          // doet de eerste file die leesbaar is terug geven.
                          
                          //maindir/map1/image1.jpg
                          //maindir/map2/image2.jpg

                              
                          function filesInDir($p_sPath)
                          {
        
                              if(is_dir($p_sPath))
                              {
    
                                  $p_aDirFiles = null;            
                                  foreach (new DirectoryIterator($p_sPath) as $fileInfo)
                                  {

                                      if(!$fileInfo->isDot() and $fileInfo->isDir())
                                      {
                
                                          foreach (new DirectoryIterator($p_sPath.'/'.$fileInfo->getFilename()) as $fileInfo2)
                                          {

                                              if(!$fileInfo2->isDot() AND $fileInfo2->getFilename() != 'Thumbs.db' and $fileInfo2->isReadable() ){
                                              $p_aDirFiles[] = $fileInfo->getFilename().'/'.$fileInfo2->getFilename();continue; }
                                          }                
                                      }                
                                  }
    
                                  return $p_aDirFiles;
                              }

                              return false;
                          }

                          
                          foreach(filesInDir(SitePath.'cms/uploaded/images/') as $file)
                          {

                              printf('<a href="%1$s" rel="lightbox-mobile" clsss="page">%1$s</a><br>', 'map1/'.$file);
                          }
    
                          ?>


blijkbaar doe ik nog iets fout want op de localhost krijg ik deze foutmelding:

Warning: Invalid argument supplied for foreach() in D:\My Dropbox\Websites\xxxxxxx.nl\site2\site\index.php on line 115

en online zie ik niets..

Toevoeging op 09/08/2010 22:50:17:

denk je dat er nog iets te redden is met php versie 4...?
dit is het laatste wat ik nog voor de site moet maken, dan is ie na weken zwoegen af, dus het zou heel mooi zijn als we hier nog uitkomen!
 
Mark Beets

Mark Beets

09/08/2010 23:29:33
Quote Anchor link
Dan gaan we er toch nog even een keer na kijken. Alleen omdat ik het vervelend vind dat jij een error krijgt hoor ;-), wat anders.

DirectoryIterator class werkt alleen onder PHP 5, wil je verder gaan?
Ik vind eigenlijk wel dat je mag verwachten dat je host PHP5 heeft.

NOTE - met deze foutmelding niet zo heel belangrijk. Maar zorg er voor dat je php file altijd utf-8 is. Heb ik ook wel hele rare fouten mee gehad. voor notepad++ codering, utf-8 zonder BOM.

Nu verder - dat je niets op het beeld krijg op de host klopt.. zie toevoeging code.

Die foutmelding die je krijgt, komt door: de functie return false geeft.
Hij kan het pad niet vinden. Ik heb nog even een regel toegevoegd.
Je kan natuurlijk het pad nog even afvangen. Maar goed, hier nogmaals

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?php
    //-----------------------------------------------------------------
    //    Configure > Error display
    //-----------------------------------------------------------------

    error_reporting(E_ALL);
    ini_set("display_errors","On");
    
    //-----------------------------------------------------------------
    // Set Constants SEPARATOR: \
    //-----------------------------------------------------------------

    define ('DIRSEP', DIRECTORY_SEPARATOR); //windows or unix
    define ('DIRURLLink', '/');
    # SET boottrap
    $applicationPath = realpath(dirname(__FILE__) . DIRSEP . '../..' . DIRSEP) . DIRSEP;
    define ('SitePath', $applicationPath); //host root
    define ('AppPath', SitePath . 'lenny2' . DIRSEP ); // applicatie staat in map?
    
    //-----------------------------------------------------------------
    // p_sPath = main dir
    // functie gaat 1 map diep.
    // doet de eerste file die leesbaar is terug geven.

    //maindir/map1/image1.jpg
    //maindir/map2/image2.jpg
    //-----------------------------------------------------------------  

    function filesInDir($p_sPath)
    {
        
      if(is_dir($p_sPath))
      {
    
          $p_aDirFiles = null;            
          foreach (new DirectoryIterator($p_sPath) as $fileInfo)
          {

              if(!$fileInfo->isDot() and $fileInfo->isDir())
              {
                
                  foreach (new DirectoryIterator($p_sPath.DIRSEP.$fileInfo->getFilename()) as $fileInfo2)
                  {

                      if(!$fileInfo2->isDot() AND $fileInfo2->getFilename() != 'Thumbs.db' and $fileInfo2->isReadable() ){
                      $p_aDirFiles[] = $fileInfo->getFilename().DIRSEP.$fileInfo2->getFilename();continue; }
                  }                
              }                
          }
    
          return $p_aDirFiles;
      }

      return false;
    }
  

    
  foreach( filesInDir(AppPath.'cms'.DIRSEP.'uploaded'.DIRSEP.'images') as $file)
  {

      printf('<a href="%1$s" rel="lightbox-mobile" clsss="page">%1$s</a><br>', 'map1/'.$file);
  }
    
  ?>


Ik hoop dat je er wat aan hebt..
Echo anders > SitePath AppPath en je zal er uit komen.
Gewijzigd op 09/08/2010 23:32:57 door Mark Beets
 
Peps from Yesterday

Peps from Yesterday

10/08/2010 00:24:04
Quote Anchor link
mark, ik word gek.
ik blijf maar deze fout krijgen:
Warning: Invalid argument supplied for foreach() in C:\My Dropbox\Websites\xxxxx.nl\site2\site\index.php on line 125
(dit is dus lijn 48)

ik heb hier al verschillende dingen geprobeerd in te vullen:
define ('AppPath', SitePath . 'http://localhost/xxxxxx.nl/site2/site/' . DIRSEP ); // applicatie staat in map?

alles zonder succes!

ps. zou dit nu ook op php4 moeten werken?
 

10/08/2010 00:50:18
Quote Anchor link
Probeer het eerst eens te begrijpen voordat je wat invult. Je zegt nu dat je AppPath gelijk is aan vanuit de huidige directory twee directory's omhoog . DIRECTORY_SEPERATOR . 'http://localhost/xxxxxx.nl/site2/site/' . DIRECTORY_SEPERATOR.
Dat kan nooit kloppen.
Maar goed, je moet dat scriptje hierboven wat slopen, want er staat veel onzin in die je niet nodig hebt.
 
Mark Beets

Mark Beets

10/08/2010 01:03:20
Quote Anchor link
Jammer .. shit is dat he.. maar 1 ding is zeker het is nooit localhost.
Gebruik altijd DIRSEP voor paden naar mappen etc.. Weet je zeker dat dat goed staat.
Voor links gebruik je DIRURLLink.

echo SitePath, krijg je dan?
SitePath = C:\My Dropbox\Websites\
dan is
define ('AppPath', SitePath.'xxxxx.nl'.DIRSEP.'site2'.DIRSEP .'site'.DIRSEP );
en
foreach( filesInDir(AppPath.'cms'.DIRSEP.'uploaded'.DIRSEP.'images')

zo is het toch bij je?
C:\My Dropbox\Websites\xxxxx.nl\site2\site\cms\uploaded\images
C:\My Dropbox\Websites\ = SitePath
xxxxx.nl\site2\site\ = AppPath
cms\uploaded\images = de rest
 
Peps from Yesterday

Peps from Yesterday

10/08/2010 11:42:45
Quote Anchor link
thanks mark, hij doet het. en bijna helemaal wat ie moet doen.

is het nu nog mogelijk om, misschien dmv css oid, alle behalve de eerste photo uit een subfolder te verbergen voor het zicht? (Niet verwijderen)

dan is het helemaal af, want dan heb ik per subfolder 1 link, maar wel alle foto's uit het album in de lightbox serie staan!
 

Pagina: 1 2 volgende »



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.