• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Es regnet, ist neblig und kalt, alle sind krank und der Chef wird zunehmend cholerisch. Das Thema des Monats ist also folgerichtig --> Das Grau(en)
    Wir sind gespannt, war Euch dazu einfällt! Zum Wettbewerb --> Klick

PHP Unlink Problem

  • Ersteller Applefan88
  • Erstellt am

Applefan88

Gast
Hallo, ich habe ein Problem mit einem unlink Befehl.
Ich habe ein Verzeichnis angelegt und dort lasse ich Dateien hineinladen.
Nun möchte ich das man in einer Liste, die alle Dateien in dem Verzeichnis anzeigt, die Möglichkeit hat Dateien zu löschen.

Das alles ist eigentlich schon fertig, nur mit dem unlink Befehl komme ich nicht klar!
Wie kann ich eine dynamischen Dateinamen aus einem Verzeichnis löschen?

Hier mein jetziger Versuch:

Code:
$userfile = $_FILES['userfile']['name'];
$pfad = ('uploaddir/LF1 Web/');
unlink($pfad $userfile);
Kann mir einer sagen, wie ich den Dateinamen dynamisch in den Löschbefehl einfügen kann?
Also das aus dem uploaddir/LF 1 Web Verzeichnis die Datei $userfile gelöscht wird.
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Vielleicht liegt's an der Uhrzeit, ich kapiere aber nicht ganz, was klemmt. Damit das geht, müssen die Rechte des umgebenden Ordner auch den Schreibvorgang zulassen. Falls das gesichert ist, hast Du auch das Datei-Handle gelöscht, bevor Du die Datei löschst?
Code:
unset($file_handle);
unlink($file_handle);
Und: der Ordnername, den Du oben verwendest, enthält ein Leerzeichen, welches Du streng genommen »escapen« müsstest, also statt 'uploaddir/LF1 Web/' müsste es so heißen: 'uploaddir/LF1\ Web/'.
 

Applefan88

Gast
Hier mal die Fehlermeldung

Mhm ja danke, aber ich verstehe auch noch nicht allzu viel von PHP, ich bin gerade am erlernen der Sprache.
Hier mal die Fehlermeldung:

Warning: unlink(uploaddir/LF1 Web/) [function.unlink]: Permission denied in C:\Programme\xampp\htdocs\upload\delete.php on line 4
 

Applefan88

Gast
Wenn ich direkt die Datei angebe ohne eine Variable zu verwenden, funktioniert es wunderbar!
Ich verstehe einfach nicht wieso ich mit Variable "Permission Denied" erhalte!
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Mhm ja danke, aber ich verstehe auch noch nicht allzu viel von PHP, ich bin gerade am erlernen der Sprache.
Hier mal die Fehlermeldung:

Warning: unlink(uploaddir/LF1 Web/) [function.unlink]: Permission denied in C:\Programme\xampp\htdocs\upload\delete.php on line 4

Oha, Windows. Bei Linux/Unix/Mac OS X hätte ich Dir jetzt helfen können. ;) Du musst laut Fehlermeldung sicherstellen, dass der WebServer auch Schreibrechte im Ordner upload hat. Nebenbei: Wenn Dein Script funktioniert, kann man damit dann auch die Datei "delete.php" löschen? :D (nur ein Gedanke)
 

Applefan88

Gast
Bei einer direkt festgelegten Datei funzt es!
Und ich habe Schreibrechte, sonst könnte ich die Dateien ja nicht hineinladen oder?
Also, ich verstehe nicht wie ich den Befehl unlink so umformen kann, das er eine Variable benutzt!:-c
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
find auch da stimmt was mit den Rechten nicht. Welche CHMOD hat der Ordner den?
 

Applefan88

Gast
Na, ich denke Vollzugriff, sonst könnte ich doch keine Dateien darin erstellen oder?
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Warning: unlink(uploaddir/LF1 Web/)
Du hast nicht zufaellig nur die Anfuehrungszeichen vergessen? Eigentlich muesste es ja ...

Code:
unlink("uploaddir/LF1 Web/");
... heissen.

EDIT: Ups, grade sehe ich, dass Du im ersten Posting tatsaechlch Anfuehrungszeichen verwendest. Hast Du mal versucht, die ueberfluessigen Klammern wegzulassen?

Und ueberhaupt: Was ist der Unterschied zwischen $pfad und $userfile?
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
ich mag das unlink mit den 2 Variablen persönlich nicht... versuch mal:


$userfile = $_FILES['userfile']['name'];
$pfad = ('uploaddir/LF1 Web/');
$pfad.=$userfile;
unlink($pfad);
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Bei einer direkt festgelegten Datei funzt es!
Und ich habe Schreibrechte, sonst könnte ich die Dateien ja nicht hineinladen oder?
Also, ich verstehe nicht wie ich den Befehl unlink so umformen kann, das er eine Variable benutzt!:-c

Durch direkte Aneinanderreihung geht's nicht, wenn das so läuft, wie Du oben geschrieben hast. Möchtest Du in PHP verschiedene Zeichenketten zusammenbringen, bieten sich diverse Wege:
Code:
// zum Beispiel mit sprintf():

$tschuess_datei = sprintf ("uploaddir/LF1\ Web/%s", addslashes ($_FILES['userfile']['name']));
unlink($tschuess_datei);

// oder ganz platt mit einem Punkt:
$userfile = $_FILES['userfile']['name'];
$pfad = ('uploaddir/LF1 Web/');
unlink($pfad.$userfile);
 

Applefan88

Gast
Nein, die habe ich auch schon versucht!

Code:
$userfile = $_FILES['userfile']['name'];
unlink("uploaddir/LF1 Web/" . $userfile);

So funzt es auch nicht!
 

Applefan88

Gast
$tschuess_datei = sprintf ("uploaddir/LF1\ Web/%s", addslashes ($_FILES['userfile']['name']));
unlink($tschuess_datei);
funktioniert leider auch nicht kommt wieder permission denied! :mad:
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
(Huch. Jetzt hab' ich aus versehen editiert. Hier stand mal ein Loesungsvorschlag, der nicht zum Ziel fuehrte. Die wesentliche Botschaft, dass $_FILES['userfile']['name'] keine Datei auf dem Server bezeichnet, bleibt aber bestehen.)
 
Zuletzt bearbeitet:

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Nun lese ich grade im PHP-Manual folgendes...


Heisst das nicht, dass der Name der Datei auf dem Rechner des Nutzers zurueckgegeben wird? Willst Du die Datei aber auf dem Server loeschen, dann musst Du doch den Namen der Datei auf dem Server (hier: "userfile") verwenden. Oder versteh' ich da was falsch?

Stimmt, das sollte so nicht gehen... :D
 

Applefan88

Gast
Das dachte ich auch, ich verwende
Code:
$_FILES['userfile']['name']
und setze es mit einem . dahinter, funktioniert allerdings auch nicht, nun bin ich echt mit meinem Latein am Ende!

also
es funktioniert weder
Code:
$tschuess_datei = sprintf ("uploaddir/LF1 Web/%s", addslashes ($_FILES['userfile']['name']));
unlink($tschuess_datei);
noch
Code:
[B]$userfile = $_FILES['userfile']['name'];
$pfad = ('uploaddir/LF1 Web/');
unlink($pfad.$userfile);[/B]
und auch nicht das

Code:
$userfile = $_FILES['userfile']['name'];
$pfad = ('uploaddir/LF1 Web/');
unlink($pfad. $_FILES['userfile']['name']);
 

Peter Maurer

Pommerscher Krummstiel
Registriert
16.03.04
Beiträge
3.077
Jetzt lies nochmal ganz genau, was ich zuletzt geschrieben habe...
 

Applefan88

Gast
Gut gemeint, doch das ist das Ergebnis:
Warning: unlink(uploaddir/LF1 Web/userfile) [function.unlink]: No such file or directory in C:\Programme\xampp\htdocs\upload\delete.php
 

Salzi

Prinzenapfel
Registriert
29.08.06
Beiträge
555
sollte userfile nicht eine Variable sein... also mit nem $ weil eine Datei die userfile heisst gibts anscheinend nicht ;)
 

Applefan88

Gast
Wollen wir wetten, dass liegt einfach nur an Windows. :-D
Ich werde morgen einfach das Script auf meinem iBook testen, dann wird es vielleicht gehen!