• 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

Fileupload mit PHP

Chuck-.-

Bismarckapfel
Registriert
22.12.06
Beiträge
142
Hey

Zurzeit bin ich am Experimentieren bezüglich eines Fileupload Systemes das mit PHP programmiert werden soll.
In PHP selbst habe ich schon eigentlich schon einige Erfahrungen und bin auch verwundert warum mein Script nicht funktinieren will. Hab shon edliche Beispiel dazu durchgelesen.
Das Script sollte eigentlich nur eine Datei in den Ordner "uploads/bilder" speichern. Was aber schon von Anfang an nicht funktionieren will ist das "move_uploaded_file". PHP gibt mir hier schon den Wert FALSE zurück. Hab noch nie etwas in die richtung Fileuploading Programmiert und habe deshlab auch keine ahnung was ich machen soll.
Wenn mir jemand einen Tipp hat wär ich froh.

Code:
<?php
$content .= '<form enctype="multipart/form-data" action="'. $_SERVER['PHP_SELF'] .'" method="post">
<input type="hidden" name="max_file_size" value="1000">
file senden: <input name="file" type="file">
<input type="submit" value="senden">
</form>
';
             
$download = move_uploaded_file($filename_name , "uploads/bilder/".$filename_name);
var_dump($download);

echo $content; 
?>
Grüße Jannik
 
Zuletzt bearbeitet:

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
haben die ordner die richtigen rechte? darf der webserver datein in den upload ordner schreiben?
 
  • Like
Reaktionen: Chuck-.-

Hobbes_

Gast
Hallo Jannik,

Das mit dem upload ist immer so eine Sache und kann verschiedene Sicherheitsrisiken beinhalten, die Du abfangen musst. Dies nur so nebenbei. Daneben ist es jedoch eine praktische Sache und funktioniert problemlos :)

In Deinem Script hat es gleich mehrere Fehler drin. Zuerst noch eine Frage: Du hast den Inhalt des Formulars, das den upload auslösen soll und dann die Auswertungsfunktion in einen einzelnen <?PHP ?> gestellt. Ich hoffe, dass Du dies nur zur Illustration für uns gemacht hast, sonst wäre das gleich einer der Fehler. Daneben könten auch die Parameter in move_uploaded_file ein Problem sein, wenn Du sie nicht vorgängig korrekt initialisiert hast.

Kurz: Ich empfehle Dir mal das Beispiel von hier zu übernehmen (php.net; jedoch Anpassung der Pfade an Deine Server-Situation) und die Dokumentation gut zu lesen zu den betreffenden Funktionen und Parametern. Erst wenn Du das verstanden hast, kannst Du einfach die für Dich passenden Modifikationen machen.

Daneben ist es für uns einfacher zum lesen, wenn Du den Code mit dem Code-Block umfasst (siehe das # Symbol in apfeltalks Editor) statt dem Zitat-Symbol. Danke.

Viel Erfolg!
psc
 
Zuletzt bearbeitet von einem Moderator:

zeno

Lane's Prinz Albert
Registriert
05.11.05
Beiträge
4.894
Und was sagt dir php als konkrete Fehlermeldung? hast du error_reporting an?
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
<input type="hidden" name="max_file_size" value="1000">
Scheint mir 'n bisschen wenig zu sein - 1000bytes sind fast nix …
 
  • Like
Reaktionen: Chuck-.-

Chuck-.-

Bismarckapfel
Registriert
22.12.06
Beiträge
142
Hey danke für die vielen Antworten.

Den Code den ich euch gepostet habe ist so zimlich alles was was ich habe. Natürlich ist alles noch in eine HTML Datei gepackt aber sonst ist da nicht arg viel mehr.

"Hobbes" ;) wie hast du das bemeint mit dem initialisieren?

Den max_file_size hab ich auch mal auf 30000 hochgeschraubt.

error_reporting liefert keinen Wert zurück. Da wird aber der Fehler auf meiner Seite liegen da ich keine Ahnung habe wie ich mit dem error_reporting umgehen muss.

Hab mir das Fileupload erlichgesagt leichter Vorgestellt. Das demotiviert einen zimlich wenn man doch schon einges mit PHP entwickelt hat und dann bei soetwas hängen bleibt :(


PS: Die sicherheit des Scriptest ist vorerst zweitrangig. Ist nur zur übung und wird später bezüglich der Sicherheit geprüft ;)
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
lass dir mal beim Upload einer kleinen Datei mit unverfänglichem Namen das folgendes ausgeben:

<pre>
print_r($_POST);
print_r($_FILES);
</pre>


und poste das hier mal …
 

Chuck-.-

Bismarckapfel
Registriert
22.12.06
Beiträge
142
Code:
    int(2) Array (     [max_file_size] => 30000 ) Array (     [file] => Array         (             [name] => Bild 5.png             [type] =>              [tmp_name] =>              [error] => 2             [size] => 0         )  )

Das kommt dabei raus. War mir aber bekannt. Nur in $_FILES['file']['error'] steht 2 drin. was hat das zu bedeuten?
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
Da in [size] => 0 nix drinn steht - würd ich darauf tippen, datei zu groß beim senden …
 

Hobbes_

Gast
(...)
[1] Den Code den ich euch gepostet habe ist so zimlich alles was was ich habe. Natürlich ist alles noch in eine HTML Datei gepackt aber sonst ist da nicht arg viel mehr.

(...)

[2] "Hobbes" ;) wie hast du das bemeint mit dem initialisieren?

(...)

[3] Den max_file_size hab ich auch mal auf 30000 hochgeschraubt.

(...)

[4] Hab mir das Fileupload erlichgesagt leichter Vorgestellt. Das demotiviert einen zimlich wenn man doch schon einges mit PHP entwickelt hat und dann bei soetwas hängen bleibt :(

(...)

[5] PS: Die sicherheit des Scriptest ist vorerst zweitrangig. Ist nur zur übung und wird später bezüglich der Sicherheit geprüft ;)


Hallo Jannik,

Tja, am Fileupload kann man wirklich die Zähne ausbeissen :) Deshalb habe ich Dir zuerst den Link auf ein gut funktionierendes Beispiel geschickt, so dass Du mal schauen kannst, wie es funktioniert und das ganze dann modifizieren kannst...

Kurz zitiert, so dass die ganze Anleitung mit dabei ist bezüglich notwendiger Modifikationen): Ich empfehle Dir mal das Beispiel von hier zu übernehmen (php.net; jedoch Anpassung der Pfade an Deine Server-Situation) und die Dokumentation gut zu lesen zu den betreffenden Funktionen und Parametern. Erst wenn Du das verstanden hast, kannst Du einfach die für Dich passenden Modifikationen machen.


Vielen Dank übrigens für die neue Darstellung. So kann man den Code deutlich besser lesen :)

zu 1: Wenn das der ganze Code ist, dann entspricht dies genau einem konzeptionellen Problem. Du benötigst im Prinzip 2 Dateien: Ein Formular mit den Formulardaten, mit dem Du die Datei auswählst und dann hochlädst und eine zweite Datei, welche dann den upload auswertet. Alternativ kannst Du dies natürlich auch durch Parameter in einem PHP-File machen, zB mit
Code:
test.php?function=upform
test.php?function=upload
wobei Du dann je nach Parameter eine andere Ausgabe zurückschickst.

Selbstverständlich kannst du dann im Verlauf eine Kombination machen (upload verarbeiten und gleich neues Form zurücksenden. Doch würde ich initial aus didaktischen Gründen eine strikte Trennung in zwei separate Elemente empfehlen, bis es mal funktioniert.

So ist auch das Beispiel auf obenstehendem Link zu verstehen. Hast du das mal ausprobiert? Ist sehr empfehlenswert. Da es genau so funktioniert... (wirklich, kein Scherz!)

Die anderen Helfer im Forum haben Dir auch schon mal die Bedeutung der globalen Variablen gezeigt, die eben alle Infos mittragen, die Du zum Auswerten im Skript benötigst. Versuche mal das Beispiel aus und versuche die einzelnen Schritte und Parameter zu verstehen...


zu 2: Wie hast du meinen Kosenamen erraten. o_O So werde ich eigentlich am liebsten genannt :)
Mit initialisieren meinte ich eben, dass Du private Variablen $filename_name verwendest, jedoch nirgends einen Bezug zur globalen Variablen $FILES[] machst, die Du zum korrekten Auswerten der notwendigen Informationen brauchst. Auch diesbezüglich verweise ich erneut auf das funktionierende Beispiel auf der php.net Seite. Diese Beispiele sind wirklich sehr lehrreich!!!


Zu 3: Da kannst du ruhig noch höher gehen. Gerade Bilddateien benötigen viel Speicherplatz (momentan gibst Du nicht mal 30 KB frei...). Du kannst eigentlich im Teststadium nicht zu hoch gehen. Wenn die Datei zu lange ist, als dass sie während der maximalen Laufzeit des Skripts hochgeladen werden könnte (meist 30s oder so -- max. mögliche Dateigrösse also unter anderm auch von upload-Geschwindigkeit des Modems abhängig) dann kommt dann schon ein Error (timeout)... mach ruhig mal 3000000 oder noch höher...

Zu 4: Ja das dauerte auch bei mir zuerst lange - gerade weil ich mich nicht auf das einfache Beispiel einlassen wollte und es direkt komplizierter probieren wollte :) Gleicher Fehler, wie Du :)
Das kommt dann schon noch - bald bist Du unser upload Experte und schreibst ein eigenes kleines Tutorial...

Zu 5: Gleiche Meinung! Vergiss es später jedoch nicht, noch zu machen!


Letztlich bleibt meine Empfehlung dieselbe: Probier mal das oben verlinkte Beispiel aus mit zwei Dateien (ein Form und und ein upload-Auswerter; beachte, dass der Name im Form [im Beispiel 'userfile' genannt] identisch sein muss mit dem Namen, den Du in der globalen Variablen $FILES in der Klammer benötigst. Du kannst den Namen frei wählen - jedoch muss der Name übereinstimmen!).
Nebenbei: So kannst du übrigens auch mehrere Dateien miteinander übertragen: Nutze mehrere dieser Formularelemente mit verschiedenen Bezeichnern und werte dann alle im upload aus.

Beachte wirklich all diese kleinen Details und der Erfolg möge mit Dir sein (wie wohl andere Kreaturen sagen würden).

Ich leg mich mal wieder ans Kaminfeuer
Hobbes :)
 
Zuletzt bearbeitet von einem Moderator:

Chuck-.-

Bismarckapfel
Registriert
22.12.06
Beiträge
142
Juhu jetzt eght alles :)
Danke für eure Hilfe. Jetzt wird erstmal Karma verteilt. Bin richtig Glücklich.
 

duderino

Prinzenapfel
Registriert
26.01.06
Beiträge
555
Hab da auch mal ne kleine Frage zum Upload. Bin gerade dabei ein Projekt zu planen bei dem man auch Bilder auf den Server hochladen kann. Da die "normale" PHP Upload Methode jedoch ein bisschen umständlich ist, um mehrere Bilder zu laden, habe ich mich entschieden auf Ajax bzw. ein Massenuploaden zurückzugreifen.

Da man da Pearl usw. benötigt, kann ich es leider nicht selbst programmieren. Kennt jemand von euch ein gutes fertiges Script für solche Uploads?


duderino
 

Hilarious

Gelbe Schleswiger Reinette
Registriert
10.08.05
Beiträge
1.759
Hab da auch mal ne kleine Frage zum Upload. Bin gerade dabei ein Projekt zu planen bei dem man auch Bilder auf den Server hochladen kann. Da die "normale" PHP Upload Methode jedoch ein bisschen umständlich ist, um mehrere Bilder zu laden, habe ich mich entschieden auf Ajax bzw. ein Massenuploaden zurückzugreifen.

Da man da Pearl usw. benötigt, kann ich es leider nicht selbst programmieren. Kennt jemand von euch ein gutes fertiges Script für solche Uploads?


duderino

Wenn Du die Möglichkeit hast, die aktuellste PHP5-Version zu nutzen, findest Du damit auch die Möglichkeit soetwas ohne Perl umzusetzen.
 

Sir Q

Rheinischer Winterrambour
Registriert
12.04.05
Beiträge
923
Massen-Upload mit PHP - selbst mit bordmitteln kein problem:

<input name="myfile[1]" type="file" size="50" accept="*/*">
<input name="myfile[2]" type="file" size="50" accept="*/*">
<input name="myfile[3]" type="file" size="50" accept="*/*">
<input name="myfile[4]" type="file" size="50" accept="*/*">
<input name="myfile[5]" type="file" size="50" accept="*/*">


Du bekommst dann ein nettes array mit den einzelnen files …