Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Erweiterung eines Scriptes...





Frage

Hallo alle zusammen, mir ist meine nächste Frage relativ unangenehm, da mir Semi schon sehr viel geholfen hat und ich muss zugeben, dass mir das Datei-Handling unter PHP nicht liegt. Schoneinmal entschuldigung...ich hoffe dennoch, dass ich irgendwie weiterkomme... Hier meine Frage: ich habe das fertige Script, wie es in [URL=https://supportnet.de/discussion/listmessages.asp?AutoID=104158]diesem Thread[/URL] zu sehen ist in meine Seite eingebunden. Nun ist es so, dass jedes meiner Bilder einen anderen Anfang des Dateinamens besitzt. Zum Beispiel [b]bike[/b]213.jpg oder [b]haus[/b]233.jpg. Wie kann ich es machen, dass beim Aufruf des vorherigen Scripts erst eine Übersicht aller Namen (Bike, Haus, Urlaub, etc.) als Link angezeigt werden und man später per Klick auf den Link in die Kategorie weitergeleitet wird? Die URL müsste dann zum Beispiel so aussehen: die Allgemeinübersicht: fotos.php?was=all die einzelne Kategorie: fotos.php?was=bike Muss ich viel an dem Script meines alten Threads ändern?

Antwort 1 von semi

Hier die notwendigen Änderungen:

function getImages($path, $thumbnails, $was) {
...
   preg_match("/^($was)$thumbnails(\d+)\.(\D+)$/i", $file, $m)) {
...
}

if(in_array($was, array("bike", "haus", "urlaub")))
  $images = getImages("./fotos/", 2, $was); // nur eine Kategorie
else
  $images = getImages("./fotos/", 2, "\D+"); // alle
...
...
$nav .= ($has_prev_page)
       ?"    <td><a href=\"$PHP_SELF?pno=$prev_page&was=$was\"><<</a></td>\n"
       :"    <td> </td>\n";
$nav .= "    <td colspan=". ($row_size-2) ." align=center>Seite $next_page/$page_last</td>\n";
$nav .= ($has_next_page)
       ?"    <td align=right><a href=\"$PHP_SELF?pno=$next_page&was=$was\">>>"
        . "</a></td>\n"
       :"    <td> </td>\n";
...


Antwort 2 von PHP-Master

Hi Semi,
das ging ja schnell. Also der gesamte Code sieht nun so aus:


<?php
function getImages($path, $thumbnails, $was)
 {
  $result;
  settype($result, "array");
  $fh=opendir($path);
  while($file = readdir($fh))
 {    if(is_file($path.$file) &&
       preg_match("/^($was)$thumbnails(\d+)\.(\D+)$/i", $file, $m))
 {
      $result[$m[2].$m[1]] = array($path, $file, $m[1], $m[2], $m[3]);
    }
  }
if(in_array($was, array("bike")))
  $images = getImages("./fotos/", 2, $was); // nur eine Kategorieelse
  $images = getImages("./fotos/", 2, "\D+"); // alle
  closedir($fh);
  ksort($result);
  reset($result);
  return $result;
}
$images = getImages("./fotos/", 2);
$page_size     = 16;
$row_size      = 4;
$images_length = count($images);
$page_last     = ceil($images_length/$page_size);
$page_number   = $pno;//isset($_GET['pno'])?$_GET['pno']:0;
$page_offset   = $page_size * $page_number;
if($page_offset>$images_length || $page_number<0)
 {
  $page_number = 0;
  $page_offset = 0;}$has_prev_page = ($page_number>0);
$has_next_page = (($page_number+1)<$page_last);
$prev_page     = $page_number-1;
$next_page     = $page_number+1;
$images = array_slice($images, $page_offset, $page_size);
$nav  = "  <tr>\n";
$nav .= ($has_prev_page)       ?"    <td><a href=\"$PHP_SELF?pno=$prev_page&was=$was\" class=\"fade\"><<</a></td>\n"       :"    <td> </td>\n";
$nav .= "    <td colspan=". ($row_size-2) ." align=center>Seite $next_page/$page_last</td>\n";
$nav .= ($has_next_page)       ?"    <td align=right><a href=\"$PHP_SELF?pno=$next_page&was=$was\" class=\"fade\">>>"        . "</a></td>\n"       :"    <td> </td>\n";
echo "<center>\n";
echo "<table border=0>\n$nav";
$i=0;
while(list($n, $image) = each($images))
 {
  if($i++%$row_size == 0)
echo "  <tr>\n";
echo "    <td>"      ."<a href=\"fotos_show.php?bild="      .$image[2] . "1" . $image[3] . "." . $image[4]      ."\"><img src=\"". $image[0] . $image[1] . "\" border=0>"      ."</a></td>\n";
}
if($i%$row_size>0)
  echo "    <td colspan=" . ($i%$row_size) . "> </td>\n";
echo "$nav</table>\n";
echo "</center>\n";
?>


Nun gibt der Server folgende Meldung aus:


Fatal error: Allowed memory size of 4194304 bytes exhausted (tried to allocate 12 bytes) in /raid/domains/de/m/mein-name/htdocs/www/fotos.php on line 20


Und das bei der Adress-Eingabe von:
http://www.meine-domain.de/fotos.php?was=bike

Was sagt Dir die Meldung?

PS. womit testest du Deine Scripte?



Antwort 3 von PHP-Master

Oje, meine grauen Haare lassen grüßen.
Also hier der funktionierende und fehlerfreie Code für alle Interessierten:


<?php
function getImages($path, $thumbnails, $was)
 {
  $result;
  settype($result, "array");
  $fh=opendir($path);
  while($file = readdir($fh))
 {    if(is_file($path.$file) &&
       preg_match("/^($was)$thumbnails(\d+)\.(\D+)$/i", $file, $m))
 {
      $result[$m[2].$m[1]] = array($path, $file, $m[1], $m[2], $m[3]);
    }
  }

  closedir($fh);
  ksort($result);
  reset($result);
  return $result;
}
if(in_array($was, array("bike", "garten")))
  $images = getImages("./fotos/", 2, $was); // nur eine Kategorie
else
  $images = getImages("./fotos/", 2, "\D+"); // alle

$page_size     = 16;
$row_size      = 4;
$images_length = count($images);
$page_last     = ceil($images_length/$page_size);
$page_number   = $pno;//isset($_GET['pno'])?$_GET['pno']:0;
$page_offset   = $page_size * $page_number;
if($page_offset>$images_length || $page_number<0)
 {
  $page_number = 0;
  $page_offset = 0;}$has_prev_page = ($page_number>0);
$has_next_page = (($page_number+1)<$page_last);
$prev_page     = $page_number-1;
$next_page     = $page_number+1;
$images = array_slice($images, $page_offset, $page_size);
$nav  = "  <tr>\n";
$nav .= ($has_prev_page)       ?"    <td><a href=\"$PHP_SELF?pno=$prev_page&was=$was\" class=\"fade\"><<</a></td>\n"       :"    <td> </td>\n";
$nav .= "    <td colspan=". ($row_size-2) ." align=center>Seite $next_page/$page_last</td>\n";
$nav .= ($has_next_page)       ?"    <td align=right><a href=\"$PHP_SELF?pno=$next_page&was=$was\" class=\"fade\">>>"        . "</a></td>\n"       :"    <td> </td>\n";
echo "<center>\n";
echo "<table border=0>\n$nav";
$i=0;
while(list($n, $image) = each($images))
 {
  if($i++%$row_size == 0)
echo "  <tr>\n";
echo "    <td>"      ."<a href=\"fotos_show.php?bild="      .$image[2] . "1" . $image[3] . "." . $image[4]      ."\"><img src=\"". $image[0] . $image[1] . "\" border=0>"      ."</a></td>\n";
}
if($i%$row_size>0)
  echo "    <td colspan=" . ($i%$row_size) . "> </td>\n";
echo "$nav</table>\n";
echo "</center>\n";
?>


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: