PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hab ein riesiges Problem mit nem PHP-Script



Yury_b
20.07.2006, 12:55
Ich habe, wie der titel sagt, ein problem mit einem script.
Es ist eigentlich ein recht simpler code, er soll mir eigentlich nur die arbeit erleichtern, 500 bilder auf die homepage einzufügen, für meinen test habe ich aber erstmal nur 2 verwendet

nun mein problem:
irgendwie gibt es ein problem, so dass nicht nur die bilder nicht angezeigt werden, sondern auf der seite mit dem script auch der seitenaufbau komplett im eimer ist ...

der code ist hier:

<div align="center">

<?php

$bild==1;

loop {
if (!file_exists('img/hoch1-$bild.JPG')) {
echo('<a href="img/hoch1-<?php echo $bild; ?>.JPG"><img src="img/hoch1-<?php echo $bild; ?>.JPG" width="265" height="353" border="0"></a>')
};
else {endloop};
set $bild +1};

?>

</div>


das problem könnt ihr euch auf http://pictures.rpg-generation.com/l3/site/index.php?content=test&color=gelbblau genauer ansehen, eigentlich müsstre rechts noch eine tabellenzelle zu sehen sein ... (seht ihr, wenn ihr auf home oder so klickt ...)

P.S. bisher gibt es nur die bilder hoch1-1.JPG und hoch1-2.JPG

dead_orc
20.07.2006, 13:13
Sicher dass das PHP ist? Ich kenne weder loop {} noch set $var; in PHP. Mein Vorschlag:

<div align="center">
<?php
$bild=1;

while(file_exists('img/hoch1-'.$bild.'.JPG')) {
echo '<a href="img/hoch1-'.$bild.'.JPG"><img src="img/hoch1-'.$bild.'.JPG" width="265" height="353" border="0"></a>';
$bild++;
}
?>
</div>

Yury_b
30.07.2006, 12:00
So, vielen Dank nochmals ^^

Ne kleine Frage noch:

ist es irgendwie durch einen code möglich, nur so ca. 5 bilder pro seite anzeigen zu lassen oder so ? weil bei mir schmiert ab 10 bilder ca. der rechner immer ab, weil die bilder so groß sind...

mitaki
31.07.2006, 09:39
weil bei mir schmiert ab 10 bilder ca. der rechner immer ab, weil die bilder so groß sind...
Bist du dir sicher, dass es an der Bildgröße liegt? file_exists ist nämlich eine Zeit- und Ressourcenintensive Funktion.
Hast du keine andere Möglichkeit die Anzahl deiner Bilder herauszufinden?

Ein möglicher Ansatz für dich wäre über die URI (GET Methode, z.B.: bilder.php?start=5) eine "Startvariable" zu übergeben, und dein Skript so anzupassen, dass es ab dem Bild mit dieser Nummer die nächsten fünf ausgibt.

Manni
31.07.2006, 12:13
Eine Möglichkeit wäre folgendes:

foreach(scandir('dein/dir/') as $image) {
if($image != '.' && $image != '..')
echo $image
}
Das ist zwar nicht besonders performant, aber eine bessere Lösung fällt mir nicht ein ;)

Yury_b
31.07.2006, 13:13
was macht denn der code ? is das sone art erleichterung für den server ?

an den 2 über mir:
Ja, boin mir sicher ^^
Hab auch ne kategorie mit 6 bildern oder so und das funktioniert einwandfrei (bis auf, dass es ca. ne minute ladezeit hat, aber der rechner stürzt nich ab)

Manni
31.07.2006, 13:42
Öhm, das gibt alle Dateien im Unterordner dein/dir/ aus ;)
Du kannst natürlich auch noch das Format überprüfen, um nur Bilder auszugeben...

Yury_b
31.07.2006, 13:48
Achso, und gibts da auch ne Möglichkeit, dass man pro seite nur so 5-10 bilder oder so sieht und dann nen button kommt, der zur nächsten seite weiterleitet, wo halt die nächsten 5 kommen oder so ?

dead_orc
01.08.2006, 18:07
<?php
$files = scandir('dein/dir/');
$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, $start+5) AS $image)
{
echo '<img src="dein/dir/'.$image.'" alt="" /> ';
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($start+5).'">Nächste Seite</a>';
?>
Untested, without any warranty.

[EDIT]
Öhm, ja, hab das as $image vergessenn ^^"

Yury_b
01.08.2006, 20:33
OK danke, ich teste es mal und werde dann editieren ob es funktioniert hat

Ne, passiert gar nix ... leider

Rolus
02.08.2006, 17:48
Die foreach-Schleife wird auch nicht ganz korrekt aufgerufen. So müsste es funktionieren:

<?php
$files = scandir('dein/dir/');
$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, $start+5) as $image)
{
echo '<img src="dein/dir/'.$image.'" alt="'.$image.'" /><br /> ';
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($start+5).'">Nächste Seite</a>';
?>
In Zeile 2 und 6 musst du noch den Pfad zum Bilderordner anpassen.

freundliche Grüße, Rolus

Yury_b
04.08.2006, 10:41
ne funzt auch nich ^^

also am besten bisher hat der erste script gefunzt, nur da waren halt zu viele bilder, alle anderen gingen bisher nicht, keine ahnung wieso, er zeigt halt keinerlei bilder an ...

(ich habe auch ordnernamen geändert...)

dead_orc
04.08.2006, 11:50
Könnte daran liegen, dass dein Server kein PHP5 kann, und scandir PHP5 only ist. Versuch mal das hier:

<?php
$dir = "dein/dir/";
if (is_dir($dir))
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false && $file != '.' && $file != '..')
$files[] = $file;
closedir($dh);
}

$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, $start+5) as $image)
{
echo '<img src="'.$dir.$image.'" alt="'.$image.'" /><br /> ';
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($start+5).'">Nächste Seite</a>';
?>

codec
04.08.2006, 11:51
ne funzt auch nich ^^

also am besten bisher hat der erste script gefunzt, nur da waren halt zu viele bilder, alle anderen gingen bisher nicht, keine ahnung wieso, er zeigt halt keinerlei bilder an ...

(ich habe auch ordnernamen geändert...)

Gibt's die Antwort auch in "etwas präziser und verständlich"? Kthxbye.

Yury_b
04.08.2006, 16:38
@dead_orc:
Ne funzt auch nich, wird kein Bild angezeigt leider...

@Codec:

Also es funktioniert folgender Code zur Bilderanzeige bei mir:

<?php
$bildhoch=1;

while(file_exists('img/hinfahrt/hoch1-'.$bildhoch.'.JPG')) {
echo '<a href="img/hinfahrt/hoch1-'.$bildhoch.'.JPG"><img src="img/hinfahrt/hoch1-'.$bildhoch.'.JPG" width="265" height="353" border="0"></a><br><br><br>';
$bildhoch++;
}
?>
<?php
$bildquer=1;

while(file_exists('img/hinfahrt/quer1-'.$bildquer.'.JPG')) {
echo '<a href="img/hinfahrt/quer1-'.$bildquer.'.JPG"><img src="img/hinfahrt/quer1-'.$bildquer.'.JPG" width="265" height="199" border="0"></a><br><br>';
$bildquer++;
}
?>

das erste ist Hoch und das andere Querformat, ABER KEINE SORGE, BEI DEN ANDEREN CODES HABE ICH NUR HOCHFORMAT GENOMMEN !!!

So und nun mein Problem:
Da ich gerne alle Bilder ohne Qualitätsverlust anzeigen möchte, ist die Ladezeit extremst hoch, wenn in einer Galerie MEHR as 10 Bilder angezeigt werden. Also habe ich nach einem Code gefragt, der sozusagen festlegt, dass nur 5 von Hoch und 5 von Querformat angezeigt werden und unten drunter soll ein Link, der auf eine nächste Seite verweist, die ich nicht Extra für jede 5 Bilder anlegen möchte, auf der die nächsten 5 Hoch und 5 Querformat angezeigt werden sollen.

Ich hoffe du hast mein Problem verstanden...

NPC Fighter
04.08.2006, 16:45
Warum arbeitest du nicht mit MySQL? Das kannst du dann mit Seiten und Thumbnails etc sehr komfortabel ausarbeiten.

Yury_b
04.08.2006, 17:03
soll ich etwas 550 Bilder in die datenbank eintragen ???
Da kann ich auch gleich alle Bilder einzeln einsetzen ...

mitaki
04.08.2006, 17:20
Du könntest auch eines der oberen Scripte nehmen, um den Ordnerinhalt auszulesen und diesen gleich per Einfüge-Abfrage in die Datenbank speichern.

Rolus
04.08.2006, 17:29
@dead_orc
Ich glaube deine while-Schleife wird (unter Umständen) sofort abgebrochen, weil erst "." eingelesen wird (noch vor den Bildern). Ich würde das eher mit einer IF-Abfrage in der while-Schleife machen:

<?php
$dir = "dein/dir/";
if (is_dir($dir))
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if($file != '.' && $file != '..')
$files[] = $file;
}
closedir($dh);
}

$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, $start+5) as $image)
{
echo '<img src="'.$dir.$image.'" alt="'.$image.'" /><br /> ';
}
echo '<a href="'.$_SERVER['PHP_SELF'].'?start='.($start+5).'">Nächste Seite</a>';
?>
@Yury_b
Das müsste eigentlich funktionieren. Ansonsten füge mal ein error_reporting(E_ALL); an den Anfang des Scriptes ein und poste die Ausgabe. Oder gib uns mal einen Link zu der Seite, auf der du das testest. Dann könnte man dir besser helfen.
PS: In einer Datenbank würde ich die Bilder nicht speichern. Das strapaziert den Server nur unnötig. Und es müsste eigentlich auch per Ordner-Auslesen funktionieren.

freundliche Grüße, Rolus

dead_orc
04.08.2006, 17:49
Autsch, natürlich. Deswegen kam mir das auch so kurz vor -_-
Das mit der Datenbank halte ich in diesem Fall auch für etwas unsinnig, wenn er nur die Bilder anzeigen will. Mit ner DB könnte man dann prima Beschreibungen oder so hinzufügen, aber eigentlich sollte das Dateisystem für das hier reichen - wenn man damit umgehen könnte :/

Yury_b
04.08.2006, 18:15
Danke danke danke danke danke (+ 995 X danke ^^)

Also es funktioniert !

Nur ne kleine Frage:
Ist es möglich, mit der Änderung der variablen (einfach ne 1 dranhängen oder so) noch die querformat bilder zu machen ? (also alles asser der start ändern und insgesamt dann weitermachen, wenn ihr versteht, was ich meine)

Also einfach ein ja oder nein würde reichen ^^

mitaki
04.08.2006, 18:37
Du möchtest vermutlich, dass auf jeder Seite neue Bilder angezeigt werden und nicht nur neue im Hoch oder nur neue Im Queerformat?

Dann musst du den obigen Code nur doppelt verwenden und den Pfad für die Andersformatbilder anpassen. Die Startposition wäre dann für beide Identisch.

Yury_b
05.08.2006, 20:01
:( Habe mich leider zu früh gefreut... Es gibt immernoch ein kleines Problem. ich habe die Anzahl der Bilder auf 1pro kategorie pro seite gesenkt. leider ist es so, dass anstatt eines anderen bildes, das alte UND das neue angezeigt wird ... was is da wieder futsch ?

<div align="center">
<?php
$dir = "img/hinfahrt/hoch/";
if (is_dir($dir))
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if($file != '.' && $file != '..')
$files[] = $file;
}
closedir($dh);
}

$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, $start+1) as $image)
{
echo '<a href="'.$dir.$image.'" target="_blank"><img src="'.$dir.$image.'" alt="'.$image.'" Width="265" height="353" border="0"/></a><br /> ';
}

$dir1 = "img/hinfahrt/quer/";
if (is_dir($dir1))
if ($dh1 = opendir($dir1))
{
while (($file1 = readdir($dh1)) !== false)
{
if($file1 != '.' && $file1 != '..')
$files1[] = $file1;
}
closedir($dh1);
}

$start1 = (!empty($_GET1['start1'])) ? intval($_GET1['start1']) : 0;
foreach(array_slice($files1, $start, $start+1) as $image1)
{
echo '<a href="'.$dir1.$image1.'" target="_blank"><img src="'.$dir1.$image1.'" alt="'.$image1.'" Width="265" height="199" border="0"/></a><br /> ';
}
echo '<a href="index.php?content=hinfahrt&color='.($color).'&start='.($start-1).'">Vorige Seite</a><br><a href="index.php?content=hinfahrt&color='.($color).'&start='.($start+1).'">Nächste Seite</a>';
?>
</div>

Das ist der code was ich meine könnt ihr unter: http://pictures.rpg-generation.com/l3/site/index.php?content=hinfahrt&color=gelbblau nachsehen

mitaki
05.08.2006, 20:23
Bitte bitte bitte, wenn du Code postest, schreib ihn doch in
oder [PHP*] Tags :)

Aber ich denke ich hab den Fehler: Die Parameter von array_slice wurden falsch gesetzt, dies sollte nun richtig sein:

[CODE]<div align="center">
<?php
$dir = "img/hinfahrt/hoch/";
if (is_dir($dir))
if ($dh = opendir($dir))
{
while (($file = readdir($dh)) !== false)
{
if($file != '.' && $file != '..')
$files[] = $file;
}
closedir($dh);
}

$start = (!empty($_GET['start'])) ? intval($_GET['start']) : 0;
foreach(array_slice($files, $start, 1) as $image)
{
echo '<a href="'.$dir.$image.'" target="_blank"><img src="'.$dir.$image.'" alt="'.$image.'" Width="265" height="353" border="0"/></a><br /> ';
}

$dir1 = "img/hinfahrt/quer/";
if (is_dir($dir1))
if ($dh1 = opendir($dir1))
{
while (($file1 = readdir($dh1)) !== false)
{
if($file1 != '.' && $file1 != '..')
$files1[] = $file1;
}
closedir($dh1);
}

foreach(array_slice($files1, $start, 1) as $image1)
{
echo '<a href="'.$dir1.$image1.'" target="_blank"><img src="'.$dir1.$image1.'" alt="'.$image1.'" Width="265" height="199" border="0"/></a><br /> ';
}
echo '<a href="index.php?content=hinfahrt&color=' .($color).'&start='.($start-1).'">Vorige Seite</a><br><a href="index.php?content=hinfahrt&color=' .($color).'&start='.($start+1).'">Nächst e Seite</a>';
?>
</div>

Nebenbei:

Yury_b
05.08.2006, 20:37
AH WIE GEIL, ENDLICH FUNKTIONIERT ES !!!

http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif http://www.multimediaxis.de/images/smilies/old/sm_12.gif