map lezen, wanneer mappen worden gevonden, link van die map maken
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!
welk onderstaande script?
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..
Code (php)
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
(al adviseer ik je scandir, werkt net dat beetje makkelijker, maar vooruit)
maar waar moet ik die code nou invoegen? ik snap het niet..
Code (php)
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
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 />";
} ?>
$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 />";
} ?>
Code (php)
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
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);
}
}
?>
$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
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?
http://php.net/manual/en/class.directoryiterator.php ..
Peps .. weet niet of je maar 1 map diep moet .. anders kan je het natuurlijk iets aanpassen .. zie ook Code (php)
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
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);
}
// 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
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
Als hiermee je probleem niet opgelost is .. laat even je mappen structuur zien..
Gewijzigd op 09/08/2010 20:56:50 door Mark Beets
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
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!
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)
1
2
3
2
3
foreach(filesInDir('cms/uploaded/images/') as $file)
or
foreach(filesInDir('cms/uploaded/images') as $file)
or
foreach(filesInDir('cms/uploaded/images') as $file)
even zoeken ... hebbes .. gebruik zelf dit altijd
Code (php)
1
2
3
4
5
6
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);
define ('DIRSEP', DIRECTORY_SEPARATOR); //windows or unix
define ('DIRURLLink', '/');
# SET boottrap
$applicationPath = realpath(dirname(__FILE__) . DIRSEP . '../..' . DIRSEP) . DIRSEP;
define ('SitePath', $applicationPath);
Line 29
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
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?
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?
Kijk bij disabled_functions of scandir erbij staat (moet niet), en of de versie 5 en hoger is.
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)
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
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);
}
?>
# 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!
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)
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
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);
}
?>
//-----------------------------------------------------------------
// 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
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?
Dat kan nooit kloppen.
Maar goed, je moet dat scriptje hierboven wat slopen, want er staat veel onzin in die je niet nodig hebt.
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
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!