ugrás a tartalomhoz

PHP - opendir()

Lupesz · 2010. Már. 27. (Szo), 23.33
Sziasztok!
Kreáltam egy kis galériás srciptet, amivel van egy kis gond! Bár téma nyitás előtt végig olvastam a témakörhöz kapcsolódó bejegyzéseket, de sajna nem jöttem rá nálam mi a para...
Szóval íme a problémám:
A kód annyit csinál h kikeresi az index.php fájlal egy mappában lévő képeket, amikhez készít thumbnail-t majd azokat megjeleníti, es a th-ra kattintva meg lehet nyitni a képet eredeti méretében. A gond viszont az, hogy az opendir-t így használom: opendir('.') igy természetesen remekül fut, listázza az index.php-val egy mappában lévő képeket. Azonban mikor azt szeretném, hogy az index mellett lévő images mappát listázza nem tesz semmit.
Íme a kód:
<?php

$columns     = 5;
$thmb_width  = 120;
$thmb_height = 80;

function resizeImage($originalImage,$toWidth,$toHeight){
   
    list($width, $height) = getimagesize($originalImage);
    $xscale=$width/$toWidth;
    $yscale=$height/$toHeight;
   
    if ($yscale>$xscale){
        $new_width = round($width * (1/$yscale));
        $new_height = round($height * (1/$yscale));
    }
    else {
        $new_width = round($width * (1/$xscale));
        $new_height = round($height * (1/$xscale));
    }
    $imageResized = imagecreatetruecolor($new_width, $new_height);
    $imageTmp     = imagecreatefromjpeg ($originalImage);
    imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0,
                       $new_width, $new_height, $width, $height);

    return $imageResized;
}

function generateThumbnails(){
    global $thmb_width,$thmb_height;

    if ($handle = @opendir('.')) {
        while ($file = readdir($handle))  {
            if (is_file($file)){
                  if (strpos($file,'_th.jpg')){
                      $isThumb = true;
                  } else {
                      $isThumb = false;
                  }
             
                  if (!$isThumb) {
                      $dirName  = substr($file,0,strpos($file,basename($file)));
                      if (strlen($dirName) < 1) $dirName = '.';
                      $fileName = basename($file);
                      $fileMain = substr($fileName,0,strrpos($fileName,'.'));
                      $extName  = substr($fileName,strrpos($fileName,'.'),
                                          strlen($fileName)-strrpos($fileName,'.'));
                     
                      if (($extName == '.jpg') || ($extName == '.jpeg')){
                        $thmbFile = $dirName.'/'.$fileMain.'_th.jpg';
                        if (!file_exists($thmbFile)){
                            imagejpeg(resizeImage($file,$thmb_width,$thmb_height)
                                     ,$thmbFile,80);
                        }
                    }
                  }
               }
           }
    }
   
}

function getNormalImage($file){
    $base = substr($file,0,strrpos($file,'_th.jpg'));
    if (file_exists($base.'.jpg')) return $base.'.jpg';
    elseif (file_exists($base.'.jpeg')) return $base.'.jpeg';
    else return "";
}

function displayPhotos(){
    global $columns;
   
    generateThumbnails();
    $act = 0;
    if ($handle = @opendir('.')) {
        while ($file = readdir($handle))  {
            if (is_file($file)){
                  if (strpos($file,'_th.jpg')){
                    ++$act;
                    if ($act > $columns) {
                        echo '</tr><tr>
                           <td class="photo"><a href="'.getNormalImage($file).'">
                               <img src="'.$file.'" alt="'.$file.'"/></a></td>';  
                        $act = 1;
                    } else {
                        echo '<td class="photo"><a href="'.getNormalImage($file).'">
                           <img src="'.$file.'" alt="'.$file.'"/></a></td>';  
                    }
                     
                  }
              }
        }
    }  
}

?>

<html>
<head>
   <title>Photo Gallery</title>
</head>
<body>
  <center><h3>Photo Gallery</h3></center>
  <table align="center"><tr>    
    <?php displayPhotos(); ?>
  </table>      
</body>  


</html>


Esetleg valaki tudna segíteni, hogy mi lehet a probléma?
 
1

images mappa

ironwill · 2010. Már. 28. (V), 00.10
Szia!

Ha az images mappát akarod, akkor az "##kukac##opendir('.')" helyett használd a "@opendir('images')"-t.

üdv, Gábor
2

Szia! Próbáltam úgy is...de

Lupesz · 2010. Már. 28. (V), 00.23
Szia!

Próbáltam úgy is...de valamiért nem jön össze :(
Azóta már kicsit módosítottam rajta, bevezettem egy $dir változót és igy ez lett:
$dir='../images';
@opendir($dir)
Valamit az egészet egy feltételbe tettem így:
if (is_dir($dir))
{....}
else
{echo "nem könyvtár";}
Ennek pedig az lett az eredménye, hogy "nem könyvtár"....
Próbáltam teljes elérési útvonal megadásával is, de az sem nyert...
Esetleg valami ötlet ehhez? :)
3

__FILE__

oszi330 · 2010. Már. 28. (V), 10.03
Szia!

próbáld így:

opendir(dirname(__FILE__)."/images")
4

Sziasztok! Végül csak

Lupesz · 2010. Már. 28. (V), 14.53
Sziasztok!
Végül csak sikerült megoldani a problémám. Köszi a segítséget.
Íme a teljes kód ha esetleg érdekel valakit:

<?php

$columns     = 5;
$thmb_width  = 120;
$thmb_height = 80;

function resizeImage($originalImage,$toWidth,$toHeight){
   
    list($width, $height) = getimagesize($originalImage);
    $xscale=$width/$toWidth;
    $yscale=$height/$toHeight;
   
    if ($yscale>$xscale){
        $new_width = round($width * (1/$yscale));
        $new_height = round($height * (1/$yscale));
    }
    else {
        $new_width = round($width * (1/$xscale));
        $new_height = round($height * (1/$xscale));
    }
    $imageResized = imagecreatetruecolor($new_width, $new_height);
    $imageTmp     = imagecreatefromjpeg ($originalImage);
    imagecopyresampled($imageResized, $imageTmp, 0, 0, 0, 0,
                       $new_width, $new_height, $width, $height);

    return $imageResized;
}

function generateThumbnails(){
    global $thmb_width,$thmb_height;
$dir = "./images";

if (is_dir($dir))
{
    if ($handle = @opendir($dir)) {
        while ($file = readdir($handle))  {
$file = $dir."/".$file;
            if (is_file($file)){
                  if (strpos($file,'_th.jpg')){
                      $isThumb = true;
                  } else {
                      $isThumb = false;
                  }
             
                  if (!$isThumb) {
                      $dirName  = substr($file,0,strpos($file,basename($file)));
                      if (strlen($dirName) < 1) $dirName = '.';
                      $fileName = basename($file);
                      $fileMain = substr($fileName,0,strrpos($fileName,'.'));
                      $extName  = substr($fileName,strrpos($fileName,'.'),
                                          strlen($fileName)-strrpos($fileName,'.'));
                     
                      if (($extName == '.jpg') || ($extName == '.jpeg')){
                        $thmbFile = $dirName.'/'.$fileMain.'_th.jpg';
                        if (!file_exists($thmbFile)){
                            imagejpeg(resizeImage($file,$thmb_width,$thmb_height)
                                     ,$thmbFile,80);
                        }
                    }
                  }
               }
           }
    }
   
}
else
{
echo "nem konyvtar";
}
}


function getNormalImage($file){
    $base = substr($file,0,strrpos($file,'_th.jpg'));
    if (file_exists($base.'.jpg')) return $base.'.jpg';
    elseif (file_exists($base.'.jpeg')) return $base.'.jpeg';
    else return "";
}

function displayPhotos(){
    global $columns;
    $dir = "./images";
    generateThumbnails();
    $act = 0;

if (is_dir($dir))
{
    if ($handle = @opendir($dir)) {
        while ($file = readdir($handle))  {
$file = $dir."/".$file;
            if (is_file($file)){
                  if (strpos($file,'_th.jpg')){
                    ++$act;
                    if ($act > $columns) {
                        echo '</tr><tr>
                           <td class="photo"><a href="'.getNormalImage($file).'">
                               <img src="'.$file.'" alt="'.$file.'"/></a></td>';   
                        $act = 1;
                    } else {
                        echo '<td class="photo"><a href="'.getNormalImage($file).'">
                           <img src="'.$file.'" alt="'.$file.'"/></a></td>';   
                    }
                     
                  }
              }
        }
    }   
}

else
{
echo "nem könyvtar";
}
}
?>

<html>
<head>
   <title>Photo Gallery</title>
</head>
<body>
  <center><h3>Photo Gallery</h3></center>
  <table align="center"><tr>     
    <?php displayPhotos(); ?>
  </table>       
</body>   


</html>
5

Sziasztok! Nekem is ez a bajom...

kranyo · 2011. Szep. 2. (P), 11.50
Sziasztok!

Nekem is az a bajom, hogy ha az index.php-vel azonos könyvtárból nyitom meg a mappákat akkor működik a galéria. De ha változtatok, és létrehozok egy mappát ami tartalmazni fogja a többi, képeket tartalmazó mappát, nem működik. Próbáltam a $dir = "./gal"; így is teljes útvonallal is...

Köszönöm!

config.php:
<?php

//Slide gallery variables
$place = "."; //directory of the slide mount images, no need to change
$col = 3; //no. of columns in a page
$maxrow = 2; //no. of rows in a page
//$dir="."; //directory for this script, no need to change
$dir = "./gal";
$thumb = true ; //setting it to TRUE will generate real thumbnails on-the-fly, supports jpg file only and requires GD library. Setting it to FALSE will resize the original file to fit the thumbnail size, long download time. Turn it off if thumbnails don't show properly.
$croptofit = true ; //TRUE will crop the thumbnail to fit the aspect ratio of the slide mount if they aren't the same. False won't crop the thumbnail but it will be distorted if both aspect ratios are not the same.
$rollover = true ;  //thumbnail rollover effect for IE only

//Upload/Delete Module variables
$LOGIN = "admin";
$PASSWORD = "admin";
$abpath = "./gal"; //Absolute path to where images are uploaded. No trailing slash
$sizelim = "no"; //Size limit, yes or no
$size = "2500000"; //Size limit if there is one
$number_of_uploads = 5;  //Maximum number of uploads in one time

?>
index.php:
<?php
$imgdir = $_GET['imgdir'] ; 
$page = $_GET['page'];
$a_img = array();

include("header.inc");
require('config.php');

if ($rollover)
{
include('rollover.txt');
}
///// for captioning
function caption($filename) {
   $is_captioned = check_perms($filename);
    if ($is_captioned) {
print"<br><font face='Arial, Helvetica, sans-serif' size=2 color='#999999'>";
      include($filename);
print"</font>";
    }
}
///// for album description
function album($filename) {
   $is_captioned = check_perms($filename);
    if ($is_captioned) {
print"<font face='Arial, Helvetica, sans-serif' size=3 color='#cccccc'>";
      include($filename);
print"</font><br>";
    }
}

////check file permission
function check_perms($filename) {
	
if (! file_exists($filename)) return false;
	
  $fileperms = fileperms($filename);
  $isreadable = $fileperms & 4;
  if ( is_file($filename) ) {
    // pictures, thumbnails, config files and comments only need to be readable
    if (! $isreadable) {
      if (MODE_WARNING) print "$filename: wrong permission <br>";
    }
    return $isreadable;	
  }
  else if ( is_dir($filename) ) {
    // galleries need to be both readable and executable
    $isexecutable = $fileperms & 1;
    if (! $isreadable || ! $isexecutable)
      if (MODE_WARNING) print "$filename: wrong permission <br>";
    return ( $isreadable && $isexecutable); // ($dirperms & 5) == 5 ?
  }
  
  // default behavior: the filename does not exist
  return false;
}

//$dir = "./gal";

$dh = @opendir($dir);
 



 while($file = readdir($dh))
 {
if ($file != "." && $file != ".."&& is_dir($file))   
{$dname[] = $file;
sort($dname);
reset ($dname);
 }
}


print "<script language=\"JavaScript\">";
print "function MM_jumpMenu(targ,selObj,restore){eval(targ+\".location='\"+selObj.options[selObj.selectedIndex].value+\"'\");";
print "  if (restore) selObj.selectedIndex=0;}";
print "</script>";

//print "<select name=\"menu1\" onChange=\"MM_jumpMenu('parent',this,0)\">";
//print "<option value=\"#\">Képek...</option><br>\n";
$u=0;
print"<table>";
 foreach($dname as $key=>$val)
  {  
  
  
  if($dname[$u])   
	{ 
		if(($u%5)==0)
		{
			print"<tr>";
		}
		print"<td><a href=\"index.php?imgdir=$dname[$u]\">$dname[$u]</a></td>";
		//print "<option value=\"index.php?imgdir=$dname[$u]\">$dname[$u]</option>\n";
$u++;
	}
  }

print"</table>";

if ($imgdir =="")
{$imgdir = $dname[0];
}

print $imgdir;
$dimg = opendir($imgdir);
print $dimg;
 while($imgfile = readdir($dimg))
 {
 if( (substr($imgfile,-3)=="gif") || (substr($imgfile,-3)=="jpg")  || (substr($imgfile,-3)=="JPG") || (substr($imgfile,-3)=="GIF")  )
 {
   $a_img[count($a_img)] = $imgfile;
sort($a_img);
reset ($a_img);
 } 
}
//print $a_img[1];

print "<h2>$imgdir</h2>";

 $totimg = count($a_img); // total images number
 $totxpage = $col*$maxrow; // images x page
 $totpages = ($totimg%$totxpage==0)?((int)$totimg/$totxpage):((int)($totimg/$totxpage)+1); // number of total pages

 if($totimg == false)
   print "<br><font size=2 face=verdana>No Images available in your \"IMAGES\" directory yet!!</font><br>";
 else
 {

///print album description
$album_name = "$imgdir/album.txt";
album($album_name);

print "<center> <div id='gallery'><table width=700 bgcolor=#474747 border=0 bordercolor=#ffffff cellpadding=2 cellspacing=3>\n";
  // start page
  if($page=="" || $page==1)
  {
   $x=0;
   $page = 1;
  }
  else
   $x = (($page-1)*($totxpage));
  $r=0;

  // print of table
  foreach($a_img as $key=>$val)
  {
$caption_name = "$imgdir/$a_img[$x].txt";

   if(($x%$col)==0)
    print "<tr>\n";
   if($a_img[$x])
   {
$size = getimagesize ("$imgdir/$a_img[$x]");
$halfw = round($size[0]/2);
$halfh = round($size[1]/2);
$quarterw = round($size[0]/4);
$quarterh = round($size[1]/4);
if($size[1] < $size[0])
{
    $height = 86;
    $width = 130;
    $imgnumber = ($x+1);
    if("$imgdir/$a_img[$x]" !="")

if ($thumb){
$thumbnail = "thumbs.php?image=$imgdir/$a_img[$x]&newheight=86&newwidth=130&width=$size[0]&height=$size[1]";
}
else 
{
$thumbnail =  "$imgdir/$a_img[$x]";
}
$kep=  "$imgdir/$a_img[$x]";
print "<td align=center valign=top>";
print "<TABLE WIDTH=198 BORDER=0 CELLPADDING=0 CELLSPACING=0>";
print "<TR><TD COLSPAN=3><IMG SRC=\"$place/slide_01.gif\" WIDTH=198 HEIGHT=47></TD></TR>";
print "<TR><TD><IMG SRC=\"$place/slide_02.gif\" WIDTH=33 HEIGHT=86></TD>";


echo '<td><a href="', urlencode($imgdir), '/', urlencode($a_img[$x]),'">';



//echo '<TD><a href="',rawurlencode($kep), '">';

print"<img src=\"$thumbnail\" height=$height width=$width border=0 alt='$a_img[$x]' style=\"filter:alpha(opacity=100)\" onmouseout=\"gradualfade(this,100,30,4)\" onmouseover=\"gradualfade(this,40,50,100)\"></a></TD>";
print "<TD><IMG SRC=\"$place/slide_04.gif\" WIDTH=35 HEIGHT=86></TD></TR><TR>";
print "<TD COLSPAN=3><IMG SRC=\"$place/slide_05.gif\" WIDTH=198 HEIGHT=56><br><font size=\"1\">";
caption($caption_name);
print "</TD></TR>";
print "</TABLE></center>";
print "</td>\n";
}
else
{    $height = 130;
    $width = 86;
if ($thumb){
$thumbnail = "thumbs.php?image=$imgdir/$a_img[$x]&newheight=130&newwidth=86&width=$size[0]&height=$size[1]";
}
else 
{
$thumbnail =  "$imgdir/$a_img[$x]";
}
 $imgnumber = ($x+1);
    if("$imgdir/$a_img[$x]" !="")
print "<td align=center valign=top>";
print "<TABLE WIDTH=198 BORDER=0 CELLPADDING=0 CELLSPACING=0>";
print "<TR><TD COLSPAN=3><IMG SRC=\"$place/slidev_01.gif\" WIDTH=198 HEIGHT=28></TD></TR>";
print "<TR><TD><IMG SRC=\"$place/slidev_02.gif\" WIDTH=56 HEIGHT=130></TD>";

echo '<td><a href="', urlencode($imgdir), '/', urlencode($a_img[$x]),'">';

print "<img src=\"$thumbnail\" height=$height width=$width border=0 alt='$a_img[$x]' style=\"filter:alpha(opacity=100)\" onmouseout=\"gradualfade(this,100,30,4)\" onmouseover=\"gradualfade(this,40,50,100)\"></a></TD>";
print "<TD><IMG SRC=\"$place/slidev_04.gif\" WIDTH=56 HEIGHT=130></TD></TR><TR>";
print "<TD COLSPAN=3><IMG SRC=\"$place/slidev_05.gif\" WIDTH=198 HEIGHT=31><br><font size=\"1\">";
caption($caption_name);
print "</TD></TR>";
print "</TABLE>";
print "</td>\n";
}   
}

   if(($x%$col) == ($col-1))
   {
    print "</tr>\n";
    $r++;
   }
  // print "r=$r - maxrow=$maxrow<br>";
   if($r==$maxrow)
   {
    break;
   }
   else
   $x++;
  }
  print "</table>\n </div>";
 }
 // page break
 


$imgdir = str_replace(" ", "%20", $imgdir); 

//page number
print "<p><font size=2 face=verdana>";
 if($totimg>$totxpage)
 {
  if($totpages>$page)
  {
   $next = $page+1;
   $back = ($page>1)?($page-1):"1";
   if($page>1)
   {
    $back = $page-1;
    print "<a href=index.php?imgdir=$imgdir&page=1>first page</a> | <a href=index.php?imgdir=$imgdir&page=$back><< back </a>";
   }
   print " &nbsp;&nbsp; <b>page $page of $totpages</b> &nbsp;&nbsp;<a href=index.php?imgdir=$imgdir&page=$next>next >></a> | <a href=index.php?imgdir=$imgdir&page=$totpages>last page</a>";
  }
  else
  {
   $next = (($page-1)==0)?"1":($page-1);
   print "<a href=index.php?imgdir=$imgdir&page=1>first page</a> | <a href=index.php?imgdir=$imgdir&page=$next><< back</a>&nbsp;&nbsp; <b>page $page of $totpages</b> &nbsp;&nbsp;";

print "</center>";
  }
 }
include("footer.inc");

print'
</ body>
</ html>
';
?>
6

Rövidebben?

Poetro · 2011. Szep. 2. (P), 12.25
Most ideszórtál egy jó nagy halom kódot, amiből nem derült ki, hogy pontosan mi is a problémád. Le tudnád redukálni annyira, amennyi a probléma reprodukálásához szükséges? Mert a fenti kódnak a 99%-ban valami olyasmi van, ami biztosan nem tartozik hozzá.
7

Röviden...

kranyo · 2011. Szep. 2. (P), 12.43
Igazad van...
Röviden:
Az index.php alapból kilistázza a vele azonos könyvtárban (config.php-ben akkor ez áll: $dir = ".";) lévő könyvtárakat és ki rakja linkként a nevüket. Ha rákattintok akkor pedig megjelennek a benne lévő képek.Én azt szeretném, hogy az index.php mellet legyen egy gal nevű mappa amiben a többi mappa van a képekkel (csak ezek a mappák jelenjenek meg)
Ezt próbáltam így: config.php-ben: $dir = "./gal";
(de próbáltam már ezer módon megadni, pl. teljes útvonallal...)
config.php-ben:
$dir = "./gal";
index.php
$dh = @opendir($dir);
  while($file = readdir($dh))
 {
if ($file != "." && $file != ".."&& is_dir($file))   
{$dname[] = $file;
sort($dname);
reset ($dname);
 }
}
print "<script language=\"JavaScript\">";
print "function MM_jumpMenu(targ,selObj,restore){eval(targ+\".location='\"+selObj.options[selObj.selectedIndex].value+\"'\");";
print "  if (restore) selObj.selectedIndex=0;}";
print "</script>";
$u=0;
print"<table>";
 foreach($dname as $key=>$val)
  {  
  if($dname[$u])   
	{ 
		if(($u%5)==0)
		{
			print"<tr>";
		}
		print"<td><a href=\"index.php?imgdir=$dname[$u]\">$dname[$u]</a></td>";
		$u++;
	}
  }
print"</table>";
Köszönöm!
8

Elérési út

Poetro · 2011. Szep. 2. (P), 13.42
<?php
$dir = './gal';
$dirlist = array();
if (is_dir($dir)) {
  $dh = opendir($dir);
  while ($directory = readdir($dh)) {
    // Ellenőrízzük, a könyvtár elérési útját
    if ($directory != '.' && $directory != '..' && is_dir($dir . '/' . $directory)) { 
      $dirlist[] = $directory;
    }
  }
}
natsort($dirlist);

if (count($dirlist)):
?>
<table>
  <tbody>
<?php foreach ($dirlist as $key => $name) : ?>
    <?php if ($key % 5 === 0) echo $key !== 0 ? "</tr>\n<tr>\n" : "<tr>\n"; ?>
      <td>
        <a href="index.php?imgdir=<?php echo rawurlencode($name); ?>">
          <?php echo $name; ?>
        </a>
      </td>
<?php endforeach; ?>
    </tr>
  </tbody>
</table>
<?php endif; ?>
9

Köszi!

kranyo · 2011. Szep. 2. (P), 14.09
Nagyon Köszönöm!