You are not logged in.

  • Login

1

Tuesday, June 3rd 2008, 12:57pm

Löschlink

Hey,

ich bin neu hier und hab mal eine frage:

Ich möchte den besuchern meiner webseite erlauben bilder hochzuladen. Das hab ich auch mit einem relativ simplen script (http://www.php-einfach.de/tuts_php_datei_upload.php) geschafft. War der upload erfolgreich, so habe ich es auch geschafft einen Löschlink auszugeben, der so funktioniert, dass ein neues PHP-Script aufgerufen wird, welches lediglich unlink("upload/".$_FILES['datei']['name']) enthält.

Nun benutze ich XAMPP unter Windows XP und sobald ich eine kleine Datei hochgeladen habe, gibt mir das Script (so wie es soll) den Löschlink aus. Klick ich nun auf den Löschlink, so erscheint die Fehlermeldung (Warning: unlink(C:/xampp/htdocs/test/upload/) [function.unlink]: Permission denied in C:\xampp\htdocs\test\upload\loeschlink.php on line 16).

Anscheinend liegt es an den Schreibrechten, die ich jedoch unter windows nicht ändern kann (zumindest hab ich nach 2h suche keinen brauchbaren Lösungsansatz gefunden). Gibt es auch noch eine andere möglichkeit außer der unlink()-methode? Ist mein Script so überhaupt zu realisieren, oder wie macht es bpsw. rapidshare, dass nach dem upload ein löschlink ausgegeben wird?

Ich komm hier echt nicht mehr weiter und würde mich über jede hilfe freuen.

Vielen Dank schon einmal im voraus.

Lg

2

Tuesday, June 3rd 2008, 1:37pm

Das Problem liegt wohl eher daran, dass du $_FILES nach dem klicken auf den Löschlink leer ist. Der Array is nämlich nur DIREKT nach dem Absenden des Uploadformulars gesetzt. Von daher will dein Skript den Ordner "upload" löschen, was aber mit unlink nicht geht. Damit lassen sich nur Dateien löschen.

3

Tuesday, June 3rd 2008, 1:44pm

Danke für die antwort!

Wie sollte ich es deiner meinung nach dann am besten lösen? Wie kann ich den $_FILES array zum loeschlink.php weitergeben?

Danke schonma im voraus!

4

Tuesday, June 3rd 2008, 2:06pm

du musst den Zielpfad verwenden

PHP Quellcode

1
2
move_uploaded_file($_FILES['datei']['tmp_name'], ziel);
unlink(ziel);

5

Tuesday, June 3rd 2008, 2:31pm

Hey, wenn ich jetzt hier aber

PHP Quellcode

1
move_uploaded_file($_FILES['datei']['tmp_name'], "upload"); unlink("upload");


eingebe, dann hab ich ja immernoch nur das verzeichnis. Wie erreich ich, dass ich später den genauen dateinamen zum löschen kenne?

Danke, danke, danke!

6

Tuesday, June 3rd 2008, 2:42pm

Als Ziel gibt man nicht das Verzeichnis, sondern Verzeichnis+Dateinamen an (wie im Tutorial) - dieser steht unter "name" zur Verfügung.

PHP Quellcode

1
2
move_uploaded_file($_FILES['datei']['tmp_name'], "upload/".$_FILES['datei']['name']);
unlink("upload/".$_FILES['datei']['name']);

7

Tuesday, June 3rd 2008, 2:53pm

Also:

Mit dem Formular lädt man hoch -> upload.php wertet serverseitig aus und -> gibt bei erfolgreichem upload ->loeschlink.php aus. Klickt man auf diesen loeschlink, soll die datei gelöscht werden. Und genau hier ist das oben beschriebene problem:

Das $_FILES Array ist in der loeschlink.php ja nicht mehr gültig und somit versucht unlink() den kompletten upload ordner zu löschen, anstatt (wie vorgesehen) nur die hochgeladene datei.

Ich bräuchte den genauen namen der datei ohne das $_FILES Array zu benutzen, da dies ja scheinbar in der loeschlink.php nicht mehr gültig ist. Wie geb ich den anmen der datei weiter, sodass ich die datei mit unlink() löschen kann?

Danke für die Hilfe!

8

Tuesday, June 3rd 2008, 4:13pm

Du kannst den Dateinamen ja per GET oder POST an loeschlink.php übergeben.

9

Tuesday, June 3rd 2008, 6:37pm

Ja danke, gute idee, aber wie übermittelt man zusätzlich noch den dateinamen? Hab auch schon gegoogelt, find aber net wirklich was. Geht da was über en hidden input?

Vielen dank für die Hilfe!

Lg

10

Tuesday, June 3rd 2008, 7:12pm

machs doch per GET, also Link URL: delete.php?loesche=x.jpg
Als hidden input geht natürlich auch.

11

Tuesday, June 3rd 2008, 7:54pm

Kannst du mir des mit GET bitte anhand von meinem beispiel erklären. Ich weiß nämlich net, ob ich POST und GET in einem Formular gleichzeitig verwenden kann. Zudem versteh ich deine umsetzung leider nicht ganz.

Danke für die bemühungen!

Lg

12

Tuesday, June 3rd 2008, 8:37pm

Hier eine gute Tutorialseite, die du vielleicht mal durcharbeiten solltest: http://tut.php-quake.net/

PHP Quellcode

1
echo '<a href="delete.php?x='.$_FILES['datei']['name'].'">löschen</a>'; // link

delete.php

PHP Quellcode

1
2
if(in_array($_GET['x'], scandir('upload')))  // sicherheitsabfrage
unlink($_GET['x']); // löschen

13

Wednesday, June 4th 2008, 12:11am

Danke Donut, aber ich bekomm, wenn ich den ersten Teil in meine Upload.php einfüge und den zweiten in meine loeschlink.php/delete.php, folgende fehler:



Warning: scandir(upload) [function.scandir]: failed to open dir: No error in C:\xampp\htdocs\test\upload\loeschlink.php on line 10

Warning: scandir() [function.scandir]: (errno 0): No error in C:\xampp\htdocs\test\upload\loeschlink.php on line 10

Warning: in_array() [function.in-array]: Wrong datatype for second argument in C:\xampp\htdocs\test\upload\loeschlink.php on line 10


Danke, für die hilfe.

Lg

14

Wednesday, June 4th 2008, 9:27am

dann stimmt der Pfad von loeschlink.php zu upload.php nicht.
Wirklich, es sollte erstmal darum gehen PHP zu lernen, bevor man gleich alle Funktionen nutzen will. Schau dir die Tutorial Seite mal an.

15

Tuesday, June 10th 2008, 4:12pm

Zum anderen ist es ziemlich unsicher einfach mal die Werte, die über POST/GET zu dir geschickt werden zu löschen. Da könnte ja jeder jegwelche Dateien löschen, ohne überhaupt berechtigt zu sein... Oder vielleicht Dateien gelöischt werden, die man nicht löschen sollte "rundll32.dll"

Similar threads

Social bookmarks