BlackBoard » Design, Programmierung & Entwicklung » Webdesign » Datei-Upload Script » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Datei-Upload Script
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
SpL!T
Junior Member


Dabei seit: 31.12.2004
Beiträge: 141

Datei-Upload Script       Zum Anfang der Seite springen

Hi,

wollte mal fragen, wie man ein Script (PHP) schreibt, durch das ein Benutzer eine Datei in einen Ordner auf nem Server uploaden kann. Dabei meine ich, dass im Browser die "Durchsuchen" Form erscheint.

mfg fröhlich
24.01.2006 10:52 SpL!T ist offline E-Mail an SpL!T senden Beiträge von SpL!T suchen
PygoscelisPapua PygoscelisPapua ist männlich
BlackBoarder


images/avatars/avatar-2293.png

Dabei seit: 20.12.2003
Beiträge: 1.309
Herkunft: Kiel, Schleswig-Holstein, Germany

RE: Datei-Upload Script       Zum Anfang der Seite springen

Sollte da nicht allein schon ein

<form ...>
<input type="file" ...>
</form>

reichen? Dadurch bekommst Du ein Button mit durchsuchen. Gibt noch einige Attribute, mit denen man dann steuern kann, was hochgeladen werden darf, wie groß, etc. Aber das kannst Du ja dann in Selfhtml alles Nachschlagen (je nachdem, was Du brauchst).

[Edit: ]
Das ... soll übrigens heißen, dass da in die jeweiligen Tags noch mehr reingehört, bzw. reingehören kann.

__________________
There are only two kinds of programming languages: those people always bitch about and those nobody uses.
(Bjarne Stroustrup)
*
Moving on to pastures new
GPG Key

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von PygoscelisPapua: 24.01.2006 10:59.

24.01.2006 10:58 PygoscelisPapua ist offline Homepage von PygoscelisPapua Beiträge von PygoscelisPapua suchen
SpL!T
Junior Member


Dabei seit: 31.12.2004
Beiträge: 141

Themenstarter Thema begonnen von SpL!T
      Zum Anfang der Seite springen

danke für deine rasche Antwort.

Mir ist klar, dass es das von dir geschrieben Form tag braucht, ich frage mich jedoch, wie genau das Ganze reallisiert werden kann. Also wie ich Effektiv eine Datei hochladen mit dieser Form. Kann mir fast nicht vorstellen, dass das nur mit html geht. o.0
24.01.2006 14:30 SpL!T ist offline E-Mail an SpL!T senden Beiträge von SpL!T suchen
Champus Champus ist männlich
BlackBoarder


images/avatars/avatar-2272.png

Dabei seit: 24.03.2002
Beiträge: 1.649
Herkunft: Karlsruhe

      Zum Anfang der Seite springen

Sowas sollte man am besten per PHP machen, da man dann noch bestimmte Dateigrößen, Dateiendungen und sonstige Parameter viel genauer bzw. sicherer steuern kann (ebenso wie dynamische Dateinamen uvm.)

Mehr dazu hier.

__________________
CorvusCorone -> Champus
24.01.2006 15:46 Champus ist offline Homepage von Champus Beiträge von Champus suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

ja mit php is das schon schöner das denk ich auch, deshalb wollt ich das grad mal probieren, jedoch ohne Erfolg, könnte auch dadran liegen, dass ich noch nie was mit php gemacht hab aber naja...mein code für den Upload auf der Seite sieht bis jetzt so aus:

code:
1:
2:
3:
4:
5:
<form action="input_file.htm" enctype="multipart/form-data">
datei hochladen: <input type="file">
<input type="submit" value="senden">
</form>


Das ist doch soweit richtig oder? Was muss jetzt in die input_file.htm rein, damit die Datei in einem Ordner meiner Wahl gespeichert wird??

Hab grad schon bei Selfhtml geguckt und mir die gepostete Seite näher angeschaut, aber da ich php nicht wirklich kann, komm ich da zu keinem Ergebnis leider :-/


/edit: ok jetzt bin ich soweit, dass der code heir wohl richtig sein sollte, jedoch kann er meine index.php nich anzeigen unglücklich

<?php phpinfo() ?> zeigt mir aber was an, von daher sollte php doch schon funktionieren oder?

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
<?php
$status = $_POST['senden'];
?>
<form action="input_file.htm" enctype="multipart/form-data" method="post">
datei hochladen: <input type="file">
<input type="submit" value="senden">
</form>
<?php
$status = "senden";
echo $status;
?>


//edit2: jetzt hab ich webspace gefunden mit php, aber ersagt es is nen fehler in der zeile:

<form action="input_file.htm" enctype="multipart/form-data" method="post">

///edit3: fehler eliminiert aber ich weis nich genau was ich jetzt mit der input_file.htm is, weil ich hab die ja gar nicht und ich bekomme nur nen fehler dass ich die seite nicht anzeigen kann wenn ich auf senden klicke...

und wenn ich das einfach weglasse, dann läd er keine datei hoch...

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von sleeepy: 11.01.2007 20:08.

11.01.2007 14:18 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Als Form-Action sollte auf jeden Fall ein Script genannt werden, welches mit den gesendeten Daten auch was anfangen kann. Da eine HTML-Datei einzutragen ist wie einem Blinden eine Zeitung zu geben... da gehört also in diesem Fall eine PHP-Datei rein. PHP-Code in HTML-Dateien wird in aller Regel nicht interpretiert.

Ansonsten bringt's immer was, wenn man etwaige Fehlermeldungen mit in den Beitrag schreibt, sonst ist die Fehlersuche ziemlich mühselig.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

11.01.2007 20:25 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

ok, das hab ich mir schon gedacht, aber auf was für ein php script? ist das noch viel arbeit? ich will ja eigentlich nur ne datei hochladen...so soll das dann aussehen:

klicki

wenn ich das bei mir auf dem lokalen Rechner laufen lasse, dann bekomme ich keine Fehlermeldung, sondern die index.php wird gar nicht erst angezeigt...

und auf dem webspace funktioniert es gar nicht, also da kommen keine Dateien an und es wird auch kein Fehler angezeigt.

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

11.01.2007 23:46 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Das PHP-Skript, was die Datei in Empfang nimmt und irgendwo ablegt. Kann ja durchaus die gleiche Datei sein, in der auch das Formular steht, nur muss die dann eben *.php heißen und nicht *.htm. In der PHP-Doku gibt's einen netten Abschnitt mit Beispiel zu Dateiuploads, schau da mal rein.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

12.01.2007 00:20 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

ja dass es ne php file sein muss, ist mir schon klar, ist es auf dem webspace ja auch.

nur die Datei auf die verwiesen werden soll, das geht ja eben dann auch in einer Datei, kann ich das action dann einfach rausnehmen?

den richtigen pfad für die Dateien hab ich jetzt auch schon in der php.ini eingestellt...

Aber es wird keine Datein abgespeichert...unglücklich und ne Fehlermeldung bekomme ich auch nicht unglücklich

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

12.01.2007 01:02 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

In der php.ini kannst du nur Temp-Verzeichnisse für Uploads setzen... außerdem wirst du bei deinem Webspace sicherlich keine Einstellungen in der php.ini bearbeiten können, weswegen das schonmal der Holzweg ist.

Guck dir doch mal das Beispiel an. Dort steht das Formular drin, in dem du _URL_ einfach durch den Dateinamen deines Skripts ersetzen musst. Den PHP-Teil weiter unten kannst du auch weitgehend übernehmen, du musst nur $uploaddir anpassen. Da du bei deinem Webspace-Hoster vielleicht den vollen Pfadnamen nicht kennst bzw. der sicherlich anders aussieht als lokal bei dir auf dem Rechner, kannst du ja

php:
1:
$uploaddir dirname __FILE__ ) . '/uploads/';


nehmen. Das würde dir deine Dateien in ein Unterverzeichnis uploads packen, der Teil davor bestimmt den Pfad zu der Datei, um die es gerade geht.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

12.01.2007 01:08 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

Dass man in der php.ini nur Temp-Verzeichnisse angeben kann, ist mir klar, das hab ich auch gemacht, da ich in meinem PHP auf meinem Rechner hier zuhause, noch kein tmp-dir eingestellt hatte. Aber da ichja noch keine weitere Verarbeitung der Datei mit drin hab, dacht ich das wär erstmal das schnellste um zu gucken ob überhaupt was ankommt...

Ja ich weis dass ich _URL_ durch den Namen eines PHP-Scripts ersetzten soll, doch ich habe ja keins, oder soll ich aus der index.php auf die index.php verweisen? Weil mir gesagt wurde, man könne das auch in einer Datei machen...

Egal ich hab jetzt in der zweiten Datei den Script von der Seite zum prüfen von Dateiuploads genommen, was soweit funktioniert, dass er mir jetzt wegnigstens sagt, dass die Datei nicht hochgeladen wurde:

Possible file upload attack! Here's some debugging info:
Array
(
)

Also auf meinem lokalen Rechner, denn hier kann ich jetzt auf einmal die Index.php doch anzeigen, wodurch ich den Webspace nich merh brauche...

ich glaub mein Problem ist jetzt noch diese Zeile:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))

weil ich ja nicht ein File names userfile habe, aber was muss ich dann da hinschreiben? ausserdem verstehe ich nicht , was in der Zeile genau passiert.... und wieso soll ich in dem $uploaddir noch "dirname ( __FILE__ ) . ergänzen? reicht nicht auch nur der pfad, wenn ich ihn vom untersten Verzeichnis der Festplatte angebe?

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

12.01.2007 13:19 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

      Zum Anfang der Seite springen

Zitat:
Original von sleeepy
Aber da ichja noch keine weitere Verarbeitung der Datei mit drin hab, dacht ich das wär erstmal das schnellste um zu gucken ob überhaupt was ankommt...
Du musst die Datei verarbeiten, ansonsten kannst du so auch nicht prüfen, ob was ankam. Die Doku sagt dazu: "Wurde die Datei in dem temporären Verzeichnis nicht verschoben oder umbenannt, wird sie am Ende des Requests gelöscht."

Zitat:
Ja ich weis dass ich _URL_ durch den Namen eines PHP-Scripts ersetzten soll, doch ich habe ja keins, oder soll ich aus der index.php auf die index.php verweisen? Weil mir gesagt wurde, man könne das auch in einer Datei machen...
Du kannst das alles von einer einzigen Datei aus machen, ja. In diesem Fall nimm deine index.php, baue da in den HTML-Teil dein Upload-Formular ein und packe eben auch den PHP-Code rein, der die Datei entgegennimmt (wenn es eine gibt).

Zitat:
ich glaub mein Problem ist jetzt noch diese Zeile:

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))

weil ich ja nicht ein File names userfile habe, aber was muss ich dann da hinschreiben?
'userfile' ist hier die Bezeichnung, die Das FILE-Inputfeld deines Formulars hat. Wenn du das Feld mit einem anderen Namen versehen hast, dann muss dieser String natürlich angepasst werden.

Wenn du das alles in der gleichen Datei abhandeln willst, solltest du aber vor dem Ablauf des PHP-Teils prüfen, ob überhaupt eine Datei hochgeladen wurde (denn der Teil wird ja auch ausgeführt, wenn die Seite zum ersten Mal geladen wird und nur das Formular anzeigen soll). Das kannst du aber recht einfach machen, indem du um den PHP-Teil folgende Abfrage packst:

php:
1:
2:
3:
4:
5:
6:
if ( !empty ( $_FILES 'userfile' ] ) )
{
    // ...
    // hier den restlichen PHP-Code rein
    // ...
}


Zitat:
und wieso soll ich in dem $uploaddir noch "dirname ( __FILE__ ) . ergänzen? reicht nicht auch nur der pfad, wenn ich ihn vom untersten Verzeichnis der Festplatte angebe?
Der Pfad reicht natürlich auch, allerdings musst du den dafür kennen (was bei normalem Webspace normalerweise nicht der Fall ist) und dein Script könnte so nie an einem anderen Ort ausgeführt werden. dirname ( __FILE__ ) bestimmt den absoluten Pfad zum aktuellen Script, dabei wäre es dann egal, wo das Script eigentlich liegt.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

13.01.2007 16:01 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

Rieeesen Danke für die Hilfe LX Augenzwinkern mir hat natürlich die Bezeichnung für mein File-Input Feld gefehlt...

Hab jetzt zum laufen bekommen, so dass ich eine Datei hochladen kann, welche dann in einem von mir bestimmten Verzeichnis gespeichert wird und man bei erfolgreichem Upload noch ein paar Infos zu der Datei bekommt und mit dem if ( !empty... funktioniert nun alles in einer Datei.. smile

Der Code sieht jetzt so aus:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
<?php
$status $_POST['senden'];
?>
<form action="index.php" enctype="multipart/form-data" method="post">
Datei hochladen: <input name="userfile" type="file">
<input type="submit" value="senden">
</form>

<?php
$status "senden";
?>

<?php
if ( !empty ( $_FILES 'userfile' ] ) )
{
$uploaddir '/download/FTP/upload/';
print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir $_FILES['userfile']['name'])) {
   print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
   print_r($_FILES);
} else {
   print "Possible file upload attack!  Here's some debugging info:\n";
   print_r($_FILES);
}
} 
?>

Ist nun vielleicht nicht der beste Quelltext, aber es funktioniert smile

//edit: ja das uploaden klappt jetzt, jedoch sind die hochgeladenen Dateien alle beschädigt.. unglücklich weis da vielleicht jemand Rat? Ich könnte sie jetzt überprüfen, aber davon hab ich ja auch nichts, ich weis ja dass sie nich richtig übertragen wurden irgendwie....

//edit2: also bei Bilddateien bekomme ich immer Fehler beim Öffnen, ne txt-Datei z.B geht ohne Probleme...

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von sleeepy: 13.01.2007 20:03.

13.01.2007 16:53 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Wie groß sind denn die Bilder?

Eventuell überschreitest du damit ein Größenlimit... von denen gibt's nämlich eine ganze Menge: Man kann eins im Formular setzen mit dem versteckten Eingabefeld MAX_FILE_SIZE (das gilt aber nur für den Browser). Dann gibt's noch einen Satz Direktiven in der php.ini (upload_max_file_size und post_max_size). Außerdem gibt's auch noch von Seiten des Apachen eine Einschränkung (LimitRequestBody, aber die ist per Default zumindest für Bilder groß genug).

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

13.01.2007 20:44 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
sleeepy sleeepy ist männlich
lasst mich arzt...ich bin durch


images/avatars/avatar-2241.jpg

Dabei seit: 15.03.2003
Beiträge: 1.419

      Zum Anfang der Seite springen

ok dann werd ich mir nochmal die ganzen größenlimits angucken, die Bilder waren aber alle kleiner als 500KB...werd ich nachher mal gucken und dann Bericht erstatten obs funktioniert.

/edit: ja jetzt hab ich die von php gesetzten Größen auf 100M gesetzt, und grad nochmal geguckt, da war auch nen 8KB großes Bild dabei....das kann ja wohl dann nicht an irgendwelchen Beschränkungen liegen!?

__________________
mfg sleeepy

meine original DVDs smile

meine Tüten großes Grinsen

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von sleeepy: 14.01.2007 00:31.

13.01.2007 23:24 sleeepy ist offline E-Mail an sleeepy senden Homepage von sleeepy Beiträge von sleeepy suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Webdesign » Datei-Upload Script

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH