Chris11 Geschrieben 8. August 2006 Geschrieben 8. August 2006 Hallo zusammen, ich möchte beim löschen eines Objektes in meiner Datenbank die dazugehörigen Bilder löschen. Wenn ich die Abfrage auf die Datenbank mache bzgl. der Pfade im Filesystem, werden Sie mir korrekt angezeigt. ... aber mit dem unlink nicht gelöscht! Wenn ich den Pfad von Hand eintrage (siehe auskommentierte Zeile), wird die Datei gelöscht. Ich bitte um Hilfe... ich gehe kaputt " $sql_pic_search = mysql_query($sql) or die("Anfrage nicht erfolgreich sql 1532"); while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ $temp = $overview_search_pic['path']; //$temp = "./upload/pics/big/23721206_carmel.jpg"; $temp = ".".$temp; //echo $temp; unlink($temp); }; " Danke Christopher Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 wenn du die datei löschen willst, brauchst du logischerweise CHMOD 777... zum überprüfen ob vielleicht pfadtechnisch etwas nicht stimmt würde ich dir ein include($temp); empfehlen, wodurch du dann 100% sehen kannst, ob der pfad zur datei richtig ist, und somit auch gegeben ist, dass das bild auch gelöscht werden kann...due funktion unlink müsste eigentlich gehen...also schätze ich, dass du entweder nen falschen pfad hast oder nicht ausreichen rechte in dem ordner... Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Hallo so löscht er ja (SQL Auswertung aus, Variable $temp fest eingetragen): $sql_pic_search = mysql_query($sql) or die("Anfrage nicht erfolgreich sql 1532"); while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ //$temp = $overview_search_pic['path']; $temp = "./upload/pics/big/23721206_carmel.jpg"; $temp = ".".$temp; //echo $temp; unlink($temp); }; .. und der Pfad war ein Ergebinis query, den ich von Hand in den Code kopiert habe... Über das echo konnte ich die Ausgabe auch immer überprüfen... der Pfad aus der Datenbank entsprach immer dem Format in dem Beispiel. Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 ich meinte, dass das löschen der datei nicht geht...nicht der daten in der datenbank...was du ja auch so beschrieben hattest... darum das include($temp); Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 das Beispiel beschreibt doch die Ausgabe eines Pfades aus eienr Datenbank. Das Resultat aus der DB ist immer ein Pfad, wie z.B. ./upload/pics/big/23721206_carmel.jpg -> Dieses Bild hat es definitiv gegeben; An welche Stelle soll das include? Und noch viel wichtiger: Was bezweckt es? Danke Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 $sql_pic_search = mysql_query($sql) or die("Anfrage nicht erfolgreich sql 1532"); while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ //$temp = $overview_search_pic['path']; $temp = "./upload/pics/big/23721206_carmel.jpg"; $temp = ".".$temp; //echo $temp; echo "<img src=".$temp.">"; //unlink($temp); }; 1. es kann sein, dass das bild nicht angezeigt wird... 1.1 das bedeutet, dass der pfad trotz allem nicht korrekt ist 2. das bild wird ausgegeben... 2.1 pfad ist richtig und die berechtigung um zu löschen fehlt Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Habe es gerade so probiert, wie Du beschrieben hast... und das in Etappen, damit die Frustration nicht zu gross wird. Erstaml so, wie Du beschrieben hast (+ das exit): while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ //$temp = $overview_search_pic['path']; $temp = "./upload/pics/big/23721206_carmel.jpg"; $temp = ".".$temp; //echo $temp; echo "<img src=".$temp.">"; exit; //unlink($temp); }; Das Bild war zusehen.. alles andere hätte mcih auch stark gewundert. Dann habe ich das betroffene Verzeichnis von 755 auf 777 gestellt und wieder alles scharf geschaltet: while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ //$temp = $overview_search_pic['path']; $temp = "./upload/pics/big/23721206_carmel.jpg"; $temp = ".".$temp; //echo $temp; echo "<img src=".$temp.">"; unlink($temp); }; ER LÖSCHT DIE DATEI NICHT... ich könnte heulen. Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 zwar begreife ich nicht ganz, was du mit dem exit bezwecken wolltest, aber egal... versuch mal der datei, über die wir die ganze zeit reden (die die bilder löschen soll) auch 777 zu geben und versuchs dann nochmal Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Der Code wird durch das exit unterbrochen und die Datei wird nicht weiter verarbeitet... aber wie Du schon sagst... ist egal Die Datei habe ich nachdem Bild Upload in einem anderen Formular auf 777 gesetzt... war 644. Keine Besserung! Auch das wäre sehr merkwürdig gewesen, da die explizite Angabe des Pfades bisher immer zu einer Löschung geführt hat. Ich werde heute Abend jede Zeile nocheinmal (ohne abgucken) neu schreiben. Bin schon froh wenn Du sagst, das ich keinen Denkfehler gemacht habe und es an sich funktionieren müsste. Wenn ich den Fehler gefunden habe, poste ich den ... wenn jemand noch eine Idee haben sollte bin ich für jeden weiteren Tipp dankbar. Zitieren
geloescht_JesterDay Geschrieben 8. August 2006 Geschrieben 8. August 2006 Userkommentar von http://de.php.net/unlink ...On unixoide systems you only need write permission for the directory to delete a file. The permissions of the file are nonrelevant. You need file permissions if you want to change the file data or to read the data. Hast du auf das Verzeichnis Rechte? Sagt die error_log irgendwas? Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Bei meinem Provider mit dem & in der Mitte kann ich keine logs finden, die von Relevanz wären (wie z.B. die php_error.log beim Apache). Nur Aktueller Zugriff und Statistiken. Die PHP Fehler kann ich wohl nicht einsehen. Oder liegen die nicht per default in ./logs ??? Auf das Verzeichnis Rechte? Klar 777... aber wie gesagt... wenn ich den Pfad angebe löscht er auch... die Berechtigungsschiene ist in meinen Augen nicht der richtige Ansatzpunkt... lasse mich aber gerne belehren! Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 ... wenn ich den Pfad angebe löscht er auch... wie wenn du den pfad angibst? Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 z.B. so: $temp = "./upload/pics/big/23721206_carmel.jpg"; Habe mir das Result (Artikel richtig???) aus meinem Select statement ausgeben lassen und den Pfad in $temp gespeichert... und das hat er dann auch gelöscht. Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 also haste net genau gemacht, was du solltest while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ $temp = $overview_search_pic['path']; $temp = ".".$temp; echo "<img src=".$temp.">"; exit; unlink($temp); }; mach das mal so und sag mir bitte, ob da ein bild angezeigt wird oder nicht Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 habe ich genauso gemacht... Bild war da! Guck mal in meinen ersten Post... da heb ich auch schon immer als Kommentar den Pfad drin gehabt. Das war zu Testzwecke, ob überhaubt gelöscht wird. Dein Beispiel habe ich genau so übernommen, wie Du es gepostet hast. Bild ist da... aber gelöscht wird nicht Zitieren
sockä Geschrieben 8. August 2006 Geschrieben 8. August 2006 Befindet sich das Bild aus $temp auch in dem ausgegebenen Pfad (der per echo ausgegeben wird)? Und nicht ein Unterordner oder so...?! edit: war zu schnell... denn muss ja, sonst würde er das bild nicht anzeigen edit2: gibt unlink denn TRUE oder false zurück?! Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Wie kann ich denn überprüfen, ob unlink true oder false zurückgibt? ich nehme an, das unlink "false" zurückgibt, sonst würde er ja löschen:-) Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ $temp = $overview_search_pic['path']; $temp = "'.".$temp."'"; unlink($temp); } jetzt hab ich noch eine kleine formalität geändert..könntest du auch nochmal probieren und wenns dann nicht geht, bin ich leider hier auf der arbeit überfragt. Mfg Sven Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 Tausend Dank für Deine Hilfe.... habe es genauso in den Code hinzugefügt. Die Sau löscht nicht... habe es nochmal mit einem anderen FTP Client überprüft, ob die Datei vielleicht im Cache liegt und ein Darstellungsproblem vorliegt.... leider auch nicht. Die Bilder bzw. das Bild wird nicht gelöscht. Habe auch das Bild nochmal anzeigen lassen (echo "<img src=".$temp.">";)... das geht! Berechtigungen nochmal auf 777 gesetzt. Ich verstehe das nicht mehr. Zitieren
Shadowman Geschrieben 8. August 2006 Geschrieben 8. August 2006 while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ $temp = $overview_search_pic['path']; echo "Temp: ".$temp."<br>"; $temp = "'.".$temp."'"; if(unlink($temp)) { echo "Die Datei wurde erfolgreich gelöscht"; }else{ echo "Die Datei konnte nicht gelöscht werden"; } } wenn du das so noch machst, kannst du dir vom programm sagen lassen, ob die datei gelöscht wurde oder nicht...vielleicht löscht er sie ja nur du siehst es nicht...bin so verzweifelt, dass ich sogar sowas einbauen würde^^ und schreib mir mal bitte, was da steht bei Temp: ... Zitieren
Chris11 Geschrieben 8. August 2006 Autor Geschrieben 8. August 2006 muss jetzt leider weg habe das auf die schnelle probiert (der ganze code steht vor dem ersten html...das heisst ein echo geht da nicht) und habe die ausgaben in einer variablen gespeichert... so wie ich das gesehen habe kommt gar nichts zurück... aber ich test das nochmal... danke für den tipp... ich denke das ich so zur lösung komme. Zitieren
geloescht_JesterDay Geschrieben 9. August 2006 Geschrieben 9. August 2006 Was soll eigentlich das: $temp = "'.".$temp."'"; ? Eine Datei '/path/to/image.jpg' gibt es bestimmt nicht... Unlink erwartet zwar einen String, aber wenn eine Variable schon ein String ist, muss man keine ' davor und dahinter stellen. Zitieren
Osno11 Geschrieben 9. August 2006 Geschrieben 9. August 2006 Der Datensatz aus der Datenbank lautet: ./Verzeichnisname/bild.jpg Ich hatte eigentlich immer gedacht das das bei einem ./ dann automatisch vom root aus gesucht wird... hat der Provider anscheinend anders eingestellt (oder ich habe falsch gedacht). demnach ergibt dieses "temp" konstrukt: ../Verzeichnisname/bild.jpg -> Und wie schon oben erwähnt... das bild wird angezeigt... an dem Pfad liegt es meiner Ansicht nach also nicht... Bin noch nicht zum testen gekommen, was die boolsche Abfrage von ShadowmanZ an geht... Zitieren
Chris11 Geschrieben 9. August 2006 Autor Geschrieben 9. August 2006 Lasst Euch bitte nicht blenden von meinem bekloppten denkfehler... um ins root zu kommen hätte in der Datenbank natürlich nie ein . vor meiner Pfadangabe stehen dürfen. Das nehme ich noch weg. Zitieren
Shadowman Geschrieben 11. August 2006 Geschrieben 11. August 2006 $sql_pic_search = mysql_query($sql) or die("Anfrage nicht erfolgreich sql 1532"); while($overview_search_pic = mysql_fetch_array($sql_pic_search)){ $temp = $overview_search_pic['path']; unlink($temp); }; hast dus mal so versucht? Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.