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:
Nun gibt der Server folgende Meldung aus:
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?
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:
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";
?>

