|
|
|
|
Datei-Upload Script |
SpL!T
Junior Member
Dabei seit: 31.12.2004
Beiträge: 141
|
|
Datei-Upload Script |
|
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
|
|
24.01.2006 10:52 |
|
|
PygoscelisPapua
BlackBoarder
Dabei seit: 20.12.2003
Beiträge: 1.309
Herkunft: Kiel, Schleswig-Holstein, Germany
|
|
RE: Datei-Upload Script |
|
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 |
|
|
SpL!T
Junior Member
Dabei seit: 31.12.2004
Beiträge: 141
Themenstarter
|
|
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 |
|
|
Champus
BlackBoarder
Dabei seit: 24.03.2002
Beiträge: 1.649
Herkunft: Karlsruhe
|
|
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 |
|
|
sleeepy
lasst mich arzt...ich bin durch
Dabei seit: 15.03.2003
Beiträge: 1.419
|
|
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
<?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
meine Tüten
Dieser Beitrag wurde 4 mal editiert, zum letzten Mal von sleeepy: 11.01.2007 20:08.
|
|
11.01.2007 14:18 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
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 |
|
|
sleeepy
lasst mich arzt...ich bin durch
Dabei seit: 15.03.2003
Beiträge: 1.419
|
|
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
meine Tüten
|
|
11.01.2007 23:46 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
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 |
|
|
sleeepy
lasst mich arzt...ich bin durch
Dabei seit: 15.03.2003
Beiträge: 1.419
|
|
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...
und ne Fehlermeldung bekomme ich auch nicht
__________________ mfg sleeepy
meine original DVDs
meine Tüten
|
|
12.01.2007 01:02 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
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 |
|
|
sleeepy
lasst mich arzt...ich bin durch
Dabei seit: 15.03.2003
Beiträge: 1.419
|
|
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
meine Tüten
|
|
12.01.2007 13:19 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
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 |
|
|
sleeepy
lasst mich arzt...ich bin durch
Dabei seit: 15.03.2003
Beiträge: 1.419
|
|
Rieeesen Danke für die Hilfe LX
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..
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
//edit: ja das uploaden klappt jetzt, jedoch sind die hochgeladenen Dateien alle beschädigt..
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
meine Tüten
Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von sleeepy: 13.01.2007 20:03.
|
|
13.01.2007 16:53 |
|
|
LX
El Comandante en Jefe
Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx
|
|
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 |
|
|
|
|
|
|