Rekursive Funktion abbrechen
comunicout
- php
hallo leute,
ich sitz mittlerweile schon eine ganze weile an einem nervigen problem. und zwar
geht es um fileupload/gd. ich gebe dem user die möglichkeit ein bild zu erstellen und
dieses dann auf dem server zu speichern. nun will ich die speicherroutine automatisch,
ohne dass der user einen namen angeben muss, realisieren. dazu existiert ein verzeichnis,
in dem alle (von allen usern) erstellten bilder liegen.
lädt jetzt ein user ein bild hoch und will es speichern, schaue ich in dem verzeichnis nach, ob
der filename bereits vorhanden ist. wenn ja, dann soll eine 0 als suffix angehängt werden
(so: bild0.jpg). sollte dieser name allerdings auch schon vorhanden sein, muss der name
zu bild1.jpg werden un so weiter...
meine funktion dazu lautet
function checkFilename($filename, $suffix)
{
$Pr_Su_X = strrpos ($filename, ".");
$FilePraefix = substr($filename,0,$Pr_Su_X);
$FileSuffix = substr($filename,$Pr_Su_X + 1);
$posFilename = $FilePraefix.$suffix.".".$FileSuffix;
$temp_verz = @opendir ('temp');
while($f_name=@readdir ($temp_verz))
if($f_name == $posFilename)
checkFilename($filename, $suffix + 1);
else $xx = $posFilename;
// echo $posFilename
return $xx;
}
so wie sie oben jetzt abgebildet ist bekomme ich immer das ergebnis bild0.jpg. egal, ob dieses
im verzeichnis bereits vorhanden ist oder nicht.
--
wenn ich den kommentar aktiviere, bekomme ich zu sehen, dass der code, der da steht, mehrmals
ausgeführt wird. der RICHTIGE wert (bildname) wird also wieder überschrieben.
--
zum einen verstehe ich nicht, weswegen an der stelle (kommentar) der code mehrmals aufgeführt
wird, und zum anderen wüsste ich gerne, ob man einfach eine abbruchbedingung einbauen kann.
für jegliche denkanstöße oder auch lösungswege bin ich sehr dankbar
mfg
comunicout
Moin Moin !
1. Dein Coding-Stil ist fürchterlich. Die geschweiften Klammern ({}) mag der Interpreter/Compiler für optional halten. Ich halte sie für erforderlich, weil sie die Stuktur des Programmes verdeutlichen.
2. Warum erledigst Du den Job einer Schleife in einer Rekursion?
maximum = 10^6
Zähler = 0
so lange Zähler < maximum {
erhöhe Zähler um eins
dateiname = "bild" + Zähler als Zahl mit 6 stellen + ".jpg"
falls Datei dateiname existiert {
nächsten Schleifendurchlauf starten
} sonst {
gebe dateinamen zurück
}
}
gebe Fehlerwert zurück, wahlweise Programmabbruch
Alexander
hi,
- Dein Coding-Stil ist fürchterlich. Die geschweiften Klammern ({}) mag der Interpreter/Compiler für optional
halten. Ich halte sie für erforderlich, weil...
bei einem so einfachen bzw. überschaulichen quellcode sind klammern nur nervig. die, die damit schwierigkeiten
haben, können sie ja dazuschreiben wenn sie es so nicht verstehen. aber das finde ich albern..
- Warum erledigst Du den Job einer Schleife in einer Rekursion?
..ähm, sagtest du nicht gerade was von Coding-Stil ?
mfg
comunicout
Moin Moin !
- Warum erledigst Du den Job einer Schleife in einer Rekursion?
..ähm, sagtest du nicht gerade was von Coding-Stil ?
Ja, und? Was hat das damit zu tun?
Die Frage bleibt: Warum benutzt Du eine Rekursion, wenn eine Schleife ausreicht?
Alexander
Hallo,
..ähm, sagtest du nicht gerade was von Coding-Stil ?
Die Frage bleibt: Warum benutzt Du eine Rekursion, wenn eine Schleife ausreicht?
Ist vielleicht stylischer?
Viele Grüße,
Stefan