Prüfen ob Grafik existiert -> dann ausgeben
chimon
- php
0 mark chopin0 Ashura2 Fabian St.0 Fabian St.0 Daniel
2 Anonymous0 Joe
0 Tom
Hallo alle PHPler hier,
ich will eine Sammlung an Cartoons anzeigen lassen. Die Cartoons werden auf einer Webseite veröffentlicht. Dort wird jede Woche ein weiteres geuploaded:
cartoon_0001.jpg
...
cartoon_0110.jpg
cartoon_0111.jpg
cartoon_0112.jpg
cartoon_0113.jpg
...
Ich will jetzt alle Cartoons anzeigen lassen, die existieren. Deshalb suche ich nach einer Funktion, die prüft ob ein Bild existiert. Ich würde dann so abfragen:
while (startwert = 0001, cartoon_(i)jpg existiert, i++) {
printf("<img border="0" src="http://www.link.de/cartoon$i.jpg"><br>\n);}
Welche Funktion kann ich dafür verwenden und wie würde meine Abfrage damit ausshen?
chimon
hi chimon,
es gibt bei PHP Funktionen des Filesystems und da dürfte für dich diefile_exists
ganz interessant sein.
Bei deinem while-Konstrukt gibt es noch einen Fehler.
Die Zählvariabel $i ist vom Typ Integer und wird
somit nie den Wert "0001" annehmen, sondern nur die 1.
gut, danke mark,
klar den integer 0001 gibts nicht, ich zähle ab 1 los, versuche dann aber immer mit restlichen nullen vorne aufzufüllen. geht sowas? Über die zeichenlänge des wertes oder so? eine autovervollständigung müsste doch irgendwie zu schaffen sein.
chimon
Hi,
klar den integer 0001 gibts nicht, ich zähle ab 1 los, versuche dann aber immer mit restlichen nullen vorne aufzufüllen. geht sowas? Über die zeichenlänge des wertes oder so? eine autovervollständigung müsste doch irgendwie zu schaffen sein.
Wie wäre es wenn du diese cartoons in einen extra ordner machst? wo du sonst nichts anderes reinmachst? dann brauchst du dir wegen dem dateinamen keine sorgen zu machen. dui machst dann einfach sowas:
$dir = "./cartoons";
$dh = opendir($dir);
while ($datei = readdir($dh))
{
if(is_file("./cartoons/$datei"))
{
// ueberpruefe evt. auf endung .jpg
// ausgabe der Datei
}
}
MfG
naja, ein fehler fällt mir da noch auf:
du wirst bei dem script 2 unnötige dateien bekommen
=> . und .. muss man doch noch ausschließen, oder!?!
lg
Joe
Danke, nicht ganz so schnell, ich muss erst mal testen.
danke für die hilfe.
chimon
Gibt leider eine leere seite aus...
<?
function addZero($nr) {
if($nr <= 9) {
$str = '000';
} elseif($nr <= 99) {
$str = '00';
} elseif($nr <= 999) {
$str = '0';
}
return $str;
}
$i = 1;
while(file_exists('http://www.ruthe.de/strip/img/strip_0001.jpg')) {
echo "<img src="http://www.ruthe.de/strip/img/strip_".addZero($i).$i.".jpg" />\n";
$i++;
}
?>
chimon
Mit dieser whils-Schleife klappts schon mal, leider muss ich da von hand eingeben wieviele durchläufe (cartoons) abgefragt werden sollen.
gibts da nicht eine exists abfrage die geht?
while($i <= 120) {
echo "<img src="http://www.ruthe.de/strip/img/strip_".addZero($i).$i.".jpg" />\n";
$i++;
}
noch ne frage:
klasse wäre es die ältesten zuerst zu listen. aber da musste php ja hellsehen können, denn bei welcher zahl i soll es losgehen? die höchste, dann rechnet php viel zu viel, bis das erste letzte bild angezeigt wird. könnt ihr mir folgen?
chimon
Hi,
Mit dieser whils-Schleife klappts schon mal, leider muss ich da von hand eingeben wieviele durchläufe (cartoons) abgefragt werden sollen.
ein grund meine lösung zu nehmen
noch ne frage:
klasse wäre es die ältesten zuerst zu listen. aber da musste php ja hellsehen können, denn bei welcher zahl i soll es losgehen? die höchste, dann rechnet php viel zu viel, bis das erste letzte bild angezeigt wird. könnt ihr mir folgen?
und noch ein grund meine lösung zu nehmen da diese erweitert werden kann auf:
$dir = "./cartoons";
$dh = opendir($dir);
while ($datei = readdir($dh))
{
if(is_file("./cartoons/$datei"))
{
// ueberpruefe evt. auf endung .jpg
$cartoon_array[$datei] = filemtime ("./cartoons/$datei");
}
}
// asort($cartoon_array); oder arsort($cartoon_array);
foreach($cartoon_array as $bildname => $timestamp)
{
$erstellt_datum = strftime("%Y-%m-%d %H:%M:%S", $timestamp);
echo "vom $erstellt_datum:<br>";
echo "<img src='cartoons/$bildname'>";
}
MfG
geht nicht ist nicht mein server.
chimon
Hi,
geht nicht ist nicht mein server.
wie geht nicht? ist nicht dein server? kannst jawohl nen unterordner
anlegen, oder nicht? schließlich lädst du auch ständig neue cartoons
hoch. wenn nicht, dann gib den dateien allen eben den anfang 'cartoon'
und die endung '.jpg' was dazwischen steht ist egal. musst das nur for
dem hinzufügen in das dateiarray überprüfen.
MfG
ähh? nein ich habe nie was hochgeladen, die cartoons sind ruthes cartoons und ich will sie auf einmal angezeigt beommen. verstehst du jetzt?
chimaon
Hi,
ähh? nein ich habe nie was hochgeladen,
du hast doch gesagt das jede woche oder so ein neuer hinzukommt.
die cartoons sind ruthes cartoons und ich will sie auf einmal angezeigt beommen. verstehst du jetzt?
das heißt du hast eigentlich garnicht das recht sie anzuzeigen?
MfG
bestimmt´habe ich kein recht sie anderen zugänglich zu machen. für mich kann ich alle anzeicgen lassen. ich will sie am stück ausdrucken.
chimon
Hi,
bestimmt´habe ich kein recht sie anderen zugänglich zu machen. für mich kann ich alle anzeicgen lassen. ich will sie am stück ausdrucken.
Jede Woche neu? Ich hoffe, Du nimmst wenigstens Umweltpapier? :-) *SCNR*
Gruß, Cybaer
das sollte funktioniert (hab aber leider derzeit kein php zum testen)
<?php
function addZero($nr) {
if($nr <= 9) {
$str = '000';
} elseif($nr <= 99) {
$str = '00';
} elseif($nr <= 999) {
$str = '0';
}
return $str;
}
$i = 1;
while(file_exists('http://www.ruthe.de/strip/img/strip'.addZero(($i-1)).($i-1).'.jpg')) {
$img[$i]="<img src="http://www.ruthe.de/strip/img/strip_".addZero($i).$i.".jpg" />\n";
$i++;
}
while($i>1) {
$i=$i-1;
echo $img[$i];
}
?>
lg
Joe
Gibt leider eine leere seite aus...
...
while(file_exists('http://www.ruthe.de/strip/img/strip_0001.jpg')) {
...
ein fehler:
du musst
while(file_exists('http://www.ruthe.de/strip/img/strip_'.addZero($i).$i.'.jpg')) {
schreiben
musst du bei <? vielleicht <?php schreiben?
schreibt oben mal echo "Hallo" dazu & schau, was dann in der datei steht, dann wissen wir schon mehr ...
lg
Joe
danke für den tipp. es wird leider nichts ausgegeben. seite bleibt leer.
so werden prima alle 214 cartoons ausgegeben:
while($i <= 214) {
chimaon
Hi!
<?
[...]
while(file_exists('http://www.ruthe.de/strip/img/strip_0001.jpg')) {
echo "<img src="http://www.ruthe.de/strip/img/strip_".addZero($i).$i.".jpg" />\n";
$i++;
}
?>
Für file\_exist() kann nur dann eine URL-Resource angegeben werden, wenn du a) PHP 5 verwendest und b) allow\_url\_fopen in der php.ini auf On steht, was man jedoch aufgrund der dadurch entstehenden Sicherheitslöcher vermeiden sollte. Treffen jedoch beide Bedigungen zu, würde eine Endlosschleife entstehen, da der Ausdruck dann immer TRUE ergeben würde.
Da es jedoch gar keine Ausgabe gibt, verwendest du anscheinend PHP 4, da in diesem Fall file\_exists() mit fehlender URL-Wrapper-Unterstützung immer FALSE herausgeben wird.
Darüber hinaus lässt sich - wie Anonymous gezeigt hat - gänzlich auf meine addZero()-Funktion verzichten, wenn du es so machst:
~~~php
$i = 1;
while(file_exists('cartoon_'.sprintf('%03d', $i).'jpg')) {
echo "<img src=\"cartoon_".sprintf('%03d', $i).".jpg\" />\n";
$i++;
}
Das «%03d» bezeichnet hierbei den sog. Formatierungsstring für sprintf(). Im vorliegenden Beispiel bedeutet das «d», dass der zweite übergebene Parameter $i als Integer behandelt werden soll und das «%03» gibt, an, dass hier mit bis zu drei führenden Nullen aufgefüllt werden soll.
Grüße,
Fabian St.
Hi,
naja, ein fehler fällt mir da noch auf:
du wirst bei dem script 2 unnötige dateien bekommen
=> . und .. muss man doch noch ausschließen, oder!?!
. und .. werden AFAIK durch is_file() ausgeschlossen.
MfG
puts "Hallo " + gets.chomp + "."
?> chimon
=> Hallo chimon.
Welche Funktion kann ich dafür verwenden und wie würde meine Abfrage damit ausshen?
Dafür eignet sich file_exists() bestens. Der Rest erklärt sich selbst.
Deine Abfrage (in etwa):
for($i=1; file_exists("cartoon_".$i.".jpg"); i++)
{
echo "...";
}
Einen schönen Dienstag noch.
Gruß, Ashura
Hi Ashura!
Welche Funktion kann ich dafür verwenden und wie würde meine Abfrage damit ausshen?
Dafür eignet sich file_exists() bestens. Der Rest erklärt sich selbst.
Deine Abfrage (in etwa):
for($i=1; file_exists("cartoon_".$i.".jpg"); i++)
{
echo "...";
}
So einfach, wie du es vorgeschlagen hast, funktioniert dies nicht, da die Datei ja cartoon\_0001.jpg und nicht cartoon\_1.jpg heißt, wodurch file\_exists natürlich FALSE zurückliefern würde.
Darüber hinaus halte ich while() für angebrachter, da es um eine Iteration geht, deren Ende nicht absehbar ist; dein Konstrukt ginge zwar wahrscheinlich auch, ist aber IMHO vom Stil schlechter.
Eine Möglichkeit wäre so:
~~~php
function addZero($nr) {
if($nr < 9) {
$str = '000';
} elseif($nr < 99) {
$str = '00';
} elseif($nr < 999) {
$str = '0';
}
return $str;
}
$i = 1;
while(file_exists('cartoon_'.addZero($i).$i.'jpg')) {
echo "<img src=\"datei_".addZero($i).$i.".jpg\" />\n";
$i++;
}
Zu sagen wäre jedoch noch, dass obiges Beispiel davon ausgeht, dass es keine Lücken zwischen den einzelnen Zahlen gibt.
Grüße,
Fabian St.
Hi!
Kleine Verbesserung:
> function addZero($nr) {
if($nr <= 9) {
> $str = '000';
} elseif($nr <= 99) {
> $str = '00';
} elseif($nr <= 999) {
> $str = '0';
> }
>
> return $str;
> }
Grüße,
Fabian St.
Hi,
function addZero($nr) {
if($nr <= 9) {
$str = '000';
} elseif($nr <= 99) {
$str = '00';
} elseif($nr <= 999) {
$str = '0';
}
else
{
$str = '';
}
return $str;
}
alles klar?
MfG
function addZero($nr) {
if($nr < 9) {
$str = '000';
} elseif($nr < 99) {
$str = '00';
} elseif($nr < 999) {
$str = '0';
}return $str;
}
Du meinst also `sprintf("%03d",$i)`{:.language-php}?
Hi!
Du meinst also
sprintf("%03d",$i)
?
Ja, genau :-) Ich sollte mir die ganzen *prinf()-Funktionen mal genauer anschauen... :-/
Grüße,
Fabian St.
function addZero($nr) {
if($nr < 9) {
$str = '000';
} elseif($nr < 99) {
$str = '00';
} elseif($nr < 999) {
$str = '0';
}return $str;
}$i = 1;
warum <9, <99 und <999
du meinst <=, oder *g*
lg
Joe
Hello,
wie wäre es ggf. mit glob()?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom