Zufallsbild mit Unterverzeichnis, Link und TimeOut

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Mo 7. Apr 2008, 20:25

Noch irgend eine Idee zur maximalen Verzeichnistiefe?

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Di 8. Apr 2008, 08:48

@Nebel:

Das müßte es jetzt aber sein:

Code: Alles auswählen


<?php 

$dateien = array(); 
$start=time(); 

get_dir("CMS_VALUE[1]",$start,"CMS_VAR[3]","CMS_VALUE[4]",0); 
$breite = (int) "CMS_VALUE[2]"; 


#Was gefunden? 
if (count($dateien) < 1) 
  { echo "nix gefunden"; } 
else 
  { # Array sortieren 
    sort($dateien); 

    # Zufall 
    srand ((double) microtime() * 10000000); 
    $rand_keys = array_rand ($dateien, 2); 
    $Zufallsbild = $dateien[$rand_keys[0]]; 
    $dimensions = GetImageSize($Zufallsbild); 
    echo "<div id=\"zbild\"><a href=\"$Zufallsbild\" target=\"_blank\">"; 

    if ($dimensions[0] > $breite) 
      { $divisor = $dimensions[0] / $breite; 
        $hoehe = (int) ($dimensions[1] / $divisor); 
        $thumb = capiImgScale ($Zufallsbild, $breite, $hoehe, false, false); 
        echo "<img src=\"$thumb\" width=\"$breite\" height=\"$hoehe\""; } 
    else 
      { echo "<img src=\"$Zufallsbild\" width=\"$dimensions[0]\" height=\"$dimensions[1]\""; } 

    echo " style=\"border-width:1px; border-color:#000000;\" alt=\"Klick mich f&uuml;r eine Gro&szlig;ansicht (neues Fenster)\"></a></div>\n"; 
  } 

function get_dir ($dir,$startzeit,$zeitlimit,$max_tiefe,$aktuelle_tiefe) 
  { global $dateien; 
    
    $fp=opendir($dir); 
    while($datei=readdir($fp)) 
      { if (is_dir("$dir/$datei") && $datei!="." && $datei!="..") 
          { $aktuelle_tiefe++; 
            if (time()-$starttime > $zeitlimit || $max_tiefe >= $aktuelle_tiefe) 
              { get_dir("$dir/$datei",$startzeit,$zeitlimit,$max_tiefe,$aktuelle_tiefe); } 
          } 
        else 
          { if (strlen($datei) > 4) 
              { $ext = strtolower(substr($datei,-4)); 
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png") 
                  {   $dateien[] = $dir . "/" . $datei; } 
              } 
          } 
      } 
    closedir($fp); 
   } 

?>

Grüße
Milly

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Di 8. Apr 2008, 08:57

@slecram

Version 1:
Die Zentrierung bzw. Ausrichtung kannst du doch selber über dein css bestimmen. Das Bild liegt im DIV "zbild", insofern kannst du in deinem css-template die Ausrichtung, Margins, Paddings und dergl. mehr selber vorgeben.
Z.B.:

Code: Alles auswählen

#zbild{
padding: 0;
margin: -5px 0 0 0;
}
Version 2:
Alle Bilder im Hochformat werden unterdrückt:

Code: Alles auswählen

<?php 

echo "<script>\n"; 
echo "function OpenNewWindow(Picture,Breit,Hoch)\n"; 
echo "  { xsize = Breit+35;\n"; 
echo "    ysize = Hoch+75;\n"; 

echo "    ScreenWidth = screen.width;\n"; 
echo "    ScreenHeight = screen.height;\n"; 
echo "    xpos = (ScreenWidth/2)-(xsize/2);\n"; 
echo "    ypos = (ScreenHeight/2)-(ysize/2);\n"; 

echo '    NewWindow=window.open("","Picture","height="+ysize+",width="+xsize+",scrollbars=no,resizable=no,top="+ypos+",left="+xpos+"");'."\n"; 
echo '    NewWindow.document.write ("<html><head><title>BILDANZEIGE");'."\n"; 
echo '    NewWindow.document.write ("</title></head>");'."\n"; 
echo '    NewWindow.document.write ("<body bgcolor=\'#cccccc\'>");'."\n"; 
echo '    NewWindow.document.write ("<table align=\'center\'><tr>");'."\n"; 
echo '    NewWindow.document.write ("<td align=\'center\' valign=\'top\'>");'."\n"; 
echo '    NewWindow.document.write ("<table border=\'1\' bgcolor=\'#000000\' cellpadding=\'0\' cellspacing=\'1\'><tr><td align=\'center\'>");'."\n"; 
echo '    NewWindow.document.write ("<img src=");'."\n"; 
echo '    NewWindow.document.write (Picture);'."\n"; 
echo '    NewWindow.document.write (">");'."\n"; 
echo '    NewWindow.document.write ("</tr></table>");'."\n"; 
echo '    NewWindow.document.write ("</td></tr><tr>");'."\n"; 
echo '    NewWindow.document.write ("<td align=\'center\' valign=\'bottom\'>");'."\n"; 
echo '    NewWindow.document.write ("<form><input type=\'button\' value=\'Fenster schliessen\' style=\'font-family: Verdana; font-size: 10px\' onClick=\'self.close()\'>");'."\n"; 
echo '    NewWindow.document.write ("</td></tr></table>");'."\n"; 
echo '    NewWindow.document.write ("</form></body></html>");'."\n"; 
echo '    NewWindow.document.close();'."\n"; 
echo "  }\n"; 
echo "</script>\n"; 


$dateien = array(); 
$start=time(); 
get_dir("CMS_VALUE[1]",$start,"CMS_VAR[3]"); 
$maxbreite = (int) "CMS_VALUE[2]"; 
$maxhoehe = (int) "CMS_VALUE[4]"; 

#Was gefunden? 
if (count($dateien) < 1) 
  { echo "nix gefunden"; } 
else 
  { # Array sortieren 
    sort($dateien); 

    # Zufall
    $Zufallsbild = "";
    while ($Zufallsbild == "")
      { srand ((double) microtime() * 10000000); 
        $rand_keys = array_rand ($dateien, 2); 
        $bild = $dateien[$rand_keys[0]]; 
        $dimensions = GetImageSize($bild); 
        if ($dimensions[0] > $dimensions[1]) {$Zufallsbild = $bild;}
      } 
    $Internetpfad = "http://www.meinedomain.de/cms/" . substr($Zufallsbild,2); 
    echo "<div id=\"zbild\">"; 

    if ($dimensions[0] > $maxbreite) 
      { $divisor = $dimensions[0] / $maxbreite; 
        $hoehe = (int) ($dimensions[1] / $divisor); 
        if ($hoehe > $maxhoehe) 
          { $divisor = $dimensions[1] / $maxhoehe; 
            $breite = (int) ($dimensions[0] / $divisor); 
            $hoehe = $maxhoehe; } 
        else 
          { $breite = $maxbreite; } 
        $thumb = capiImgScale ($Zufallsbild, $breite, $hoehe, false, false); 
        echo '<a href="javascript:OpenNewWindow(\''.$Internetpfad.'\','.$dimensions[0].",".$dimensions[1].")\">\n"; 
        echo "<img src=\"$thumb\" width=\"$breite\" height=\"$hoehe\""; 
      } 
    else 
      { echo '<a href="javascript:OpenNewWindow(\''.$Internetpfad.'\','.$dimensions[0].",".$dimensions[1].")\">\n"; 
        echo "<img src=\"$Zufallsbild\" width=\"$dimensions[0]\" height=\"$dimensions[1]\""; } 

    echo " style=\"border-width:1px; border-color:#000000;\" alt=\"Klick mich f&uuml;r eine Gro&szlig;ansicht (neues Fenster)\"></a></div>\n"; 
  } 


function get_dir ($dir,$startzeit,$zeitlimit) 
  { global $dateien; 
    $fp=opendir($dir); 
    while($datei=readdir($fp)) 
      { if (is_dir("$dir/$datei") && $datei!="." && $datei!="..") 
          { if (time()-$starttime > $zeitlimit) get_dir("$dir/$datei",$startzeit,$zeitlimit); } 
        else 
          { if (strlen($datei) > 4) 
              { $ext = strtolower(substr($datei,-4)); 
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png") 
                  { $dateien[] = $dir . "/" . $datei; } 
              } 
          } 
      } 
    closedir($fp); 
  } 

?> 
Grüße
Milly[/code]

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Di 8. Apr 2008, 13:58

@Milly

vielen Dank für deine Mühen. Leider klappt es nicht. Die Eingabe einer Verzeichnistiefe bewirkt keinerlei Änderungen am verhalten. Alle Unterordner werden durchsucht und angezeigt.
An der Verwendung von Mod Rewrite kann es aber nicht liegen, oder?

Schöne Grüße
Nebel

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Di 8. Apr 2008, 15:37

also das mit dem querformat klappt super.

jedoch klappt das mit dem popup nocht net

Code: Alles auswählen

javascript:OpenNewWindow('http://www.dev.feuerwehr-barntrup.de/cms/cms/upload/bildergalerie/bilder/neuenknick2006/100606_Neuenknick_043.JPG',500,375)
das ist die adresse, die generiert wird... hast du noch ne idee?

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mi 9. Apr 2008, 10:59

@Nebel
So ein PHP-Crack bin ich nun bei weitem nicht. Kann dir nicht sagen ob es mit dem "Mod Rewrite" zusammenhängt. Bei mir klappt es auf jeden Fall.
Hast du mal, zu Testzwecken, mit den Verzeichnistiefen 1 und 0 gearbeitet?

@slecram
Das Popup geht bei mir sehr gut (IE 6 und 7).

1. Erscheint das PopUp bei dir überhaupt?
2. Bekommst du eine Fehlermeldung?
3. Welcher Browser?
4. Java ausgeschaltet?

Der Link scheint richtig zu sein, denn dieses Bild 'http://www.dev.feuerwehr-barntrup.de/cm ... ck_043.JPG' kann ich mir ansehen.

Grüße
Milly

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Mi 9. Apr 2008, 12:17

Milly hat geschrieben:@Nebel
So ein PHP-Crack bin ich nun bei weitem nicht. Kann dir nicht sagen ob es mit dem "Mod Rewrite" zusammenhängt. Bei mir klappt es auf jeden Fall.
Hast du mal, zu Testzwecken, mit den Verzeichnistiefen 1 und 0 gearbeitet?
Habe es mit Verzeichnistiefen 1 und 0 versucht. Keine Änderung. Habs auch noch in einer Contenido-Umgebung ohne Mod Rewrite versucht. Geht dort leider auch nicht.

Schöne Grüße
Nebel

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mi 9. Apr 2008, 14:58

Milly hat geschrieben: @slecram
Das Popup geht bei mir sehr gut (IE 6 und 7).

1. Erscheint das PopUp bei dir überhaupt?
2. Bekommst du eine Fehlermeldung?
3. Welcher Browser?
4. Java ausgeschaltet?

Der Link scheint richtig zu sein, denn dieses Bild 'http://www.dev.feuerwehr-barntrup.de/cm ... ck_043.JPG' kann ich mir ansehen.

Grüße
Milly
1. nein, kein popup - wird auch ncihts geblockt
2. grad erst gesehen - Firefox wirft ne Fehlermeldung raus: "OpenNewWindow is not defined"
3. firefox und IE6
4. java an

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Do 10. Apr 2008, 11:12

@slecram
Kannst du mir mal bitte einen Link deiner Weppage schicken, damit ich mir das mal ansehen kann.
Habe es mal mit http//www.feuerwehr-barntrup.de/ versucht, aber der scheint nicht zu gehen.

Grüße
Milly

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » So 13. Apr 2008, 16:18

und, haste mal geguckt?


gruß

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Mo 14. Apr 2008, 09:59

Schon, aber ich finde die Seite nicht wo die Zufallsbilder angezeigt werden sollen. Poste bitte mal den Link.

Grüße
Milly

slecram
Beiträge: 54
Registriert: Do 1. Nov 2007, 16:05
Kontaktdaten:

Beitrag von slecram » Mo 14. Apr 2008, 11:46

hab ich dir doch per pm geschickt ;)

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Mo 14. Apr 2008, 20:13

Hi Milly,

ich hab mich noch mal mit dem Modul beschäftigt. Leider bin ich php-Laie.
Ein Versuch die maximale Tiefe anders zu erreichen, hat leider auch nicht funktioniert. Es kommt immer die Meldung "nix gefunden".

Wo liegt der Fehler?

Code: Alles auswählen

<?php

$dateien = array();
$start=time();

get_dir("CMS_VALUE[1]");
$breite = (int) "CMS_VALUE[2]";


#Was gefunden?
if (count($dateien) < 1)
  { echo "nix gefunden"; }
else
  { # Array sortieren
    sort($dateien);

    # Zufall
    srand ((double) microtime() * 10000000);
    $rand_keys = array_rand ($dateien, 2);
    $Zufallsbild = $dateien[$rand_keys[0]];
    $dimensions = GetImageSize($Zufallsbild);
    echo "<div id=\"zbild\"><a href=\"$Zufallsbild\" target=\"_blank\">";

    if ($dimensions[0] > $breite)
      { $divisor = $dimensions[0] / $breite;
        $hoehe = (int) ($dimensions[1] / $divisor);
        $thumb = capiImgScale ($Zufallsbild, $breite, $hoehe, false, false);
        echo "<img src=\"$thumb\" width=\"$breite\" height=\"$hoehe\""; }
    else
      { echo "<img src=\"$Zufallsbild\" width=\"$dimensions[0]\" height=\"$dimensions[1]\""; }

    echo " style=\"border-width:1px; border-color:#000000;\" alt=\"Klick mich f&uuml;r eine Gro&szlig;ansicht (neues Fenster)\"></a></div>\n";
  }

function get_dir ($dir, $recurse=true, $depth=2)
  { global $dateien;
   
    $fp=opendir($dir);
    while($datei=readdir($fp))
{ if($recurse && is_readable("$dir$datei/")) {  
		if($depth === false) {
		  $dateien = array_merge($dateien, get_dir("$dir$datei/", true));  
		} elseif($depth > 0) {
		 $dateien = array_merge($dateien, get_dir("$dir$datei/", true, $depth-1)); 
	}
      

elseif( strlen($datei) > 4)
              { $ext = strtolower(substr($datei,-4));
                if ($ext==".jpg" || $ext==".gif" || $ext=="jpeg" || $ext==".png")
                  {   $dateien[] = $dir . "/" . $datei; }
              }
          } 

         
      }
    closedir($fp);
   }



?> 
Wäre super, wenn du mir weiterhelfen könntest.
Schöne Grüße
Nebel

Milly
Beiträge: 33
Registriert: Mo 12. Sep 2005, 08:35
Wohnort: Reutlingen
Kontaktdaten:

Beitrag von Milly » Di 15. Apr 2008, 12:27

Bin zwar auch nich der PHP-Crack, aber mir sind drei Sachen augefallen:

1)
$recurse ist bei dir immer "true". Ich habe keinen Punkt gefunden wo $recurse auf "false" gesetzt wird. Insofern unsinnig....

2)
$depth wird nicht immer durchgeschleift! Es gibt eine Zeile

Code: Alles auswählen

$dateien = array_merge($dateien, get_dir("$dir$datei/", true));
Da wird $depth nicht übergeben. da du $depth auch nicht globalisiert hast (so wie $dateien z.B.), ist der Wert beim nächsten Funktionsaufruf leer. Ich denke nicht das du das so gewollt hast.

3)
Beim array_merge übernimmst du das Directory aber nicht die Files. Ich verstehe nicht wieso du mit array_merge gearbeitet hast.

Erkläre mir bitte wie dein gedanklicher Ansatz zu diesem Problem ist, dann kann ich dir vielleicht besser weiterhelfen.
Zusammen sollten wir das doch wohl schaffen ..... :wink:

Grüße
Milly

Nebel
Beiträge: 117
Registriert: Do 14. Jun 2007, 10:08
Kontaktdaten:

Beitrag von Nebel » Di 15. Apr 2008, 13:58

Hi,

ich hatte versucht diesen Ansatz hier einzubauen:
http://www.the-art-of-web.com/php/dirlist/

Gesperrt