PHP Upload

    • VB.NET

    Es gibt 60 Antworten in diesem Thema. Der letzte Beitrag () ist von jonas16423.

      Hallo Leute,
      da ich hier noch kein Tutorial dazu gefunden hab,
      mach ich mal eins (Falls es doch eins gibt könnt ihr das hier ja löschen).

      Ok, kommen wir zum PHP Skript.

      PHP-Quellcode

      1. <?php
      2. $uploaddir = $_GET['d']; // d wird später beim Upload angegeben (Kann aber auch individuell verändert werden)
      3. if (is_uploaded_file($_FILES['file']['tmp_name'])) {
      4. if (strlen($uploaddir) > 0) {
      5. $uploadfile = $uploaddir."/". basename($_FILES['file']['name']);
      6. } else {
      7. $uploadfile = basename($_FILES['file']['name']);
      8. }
      9. // $uploaddir."/". muss beim entfernen von uploaddir oben entfernt werden
      10. echo "File ". $_FILES['file']['name'] ." uploaded successfully. ";
      11. if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
      12. echo "File is valid, and was successfully moved. ";
      13. }
      14. else
      15. print_r($_FILES);
      16. }
      17. else {
      18. echo "Upload Failed!!!";
      19. print_r($_FILES);
      20. }
      21. ?>


      Vom Skript müsst ihr nicht viel verstehen, ein paar PHP kenntnisse wären aber von Vorteil.

      So, nun zum VB Code.

      VB.NET-Quellcode

      1. Dim wc As New WebClient
      2. Try
      3. wc.Encoding = System.Text.Encoding.Default
      4. wc.Headers.Add("Content-Type", "binary/octet-stream")
      5. Dim result As Byte() = wc.UploadFile(server & "/upload.php?d=" & uploaddir, "POST", Dateipfad)
      6. Dim s As String = System.Text.Encoding.UTF8.GetString(result, 0, result.Length)
      7. ' Die echo's die im PHP ausgegeben werden, werden hier in einer MsgBox angezeigt.
      8. MessageBox.Show(s)
      9. Catch ex As Exception
      10. MessageBox.Show(ex.Message)
      11. End Try



      Mehr gibts auch nichts mehr. Ich hoffe ich konnte euch ein wenig weiterhelfen.
      Falls ihr noch Anregungen oder Verbesserungsvorschläge habt, lasst es mich wissen.



      Edit: Es kommt später noch was dazu (Upload Progressbar, sicherer PHP Upload)

      Ok, nach langer Zeit, hab ich wieder etwas Zeit gehabt (hört sich iwie komisch an), das Projekt weiter zu bearbeiten

      Mit folgendem Code, könnt ihr den genauen Fortschritt des Uploads in eurem Programm anzeigen lassen.
      - Upload Geschwindigkeit
      - Progressbar
      - Datei Größe / upgeloadete Größe

      VB.NET-Quellcode

      1. Imports System.Net
      2. Public Class Form1
      3. Private WithEvents wc As New WebClient 'Dieses Mal deklarieren wir den Webclient als WithEvent, damit wir auf die verschiedenen Events vom Webclient zugreifen können (z.B. UploadProgressChanged, was auch unten benutzt wird
      4. Dim stopuhr As New Stopwatch
      5. Dim temp As Integer = 0
      6. 'Benötigte deklarationen für die bestimmung der Uplaod Geschwindigkeit
      7. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
      8. If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
      9. TextBox1.Text = OpenFileDialog1.FileName
      10. End If
      11. End Sub
      12. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      13. Button1.Enabled = False
      14. Try
      15. wc.Encoding = System.Text.Encoding.Default
      16. wc.Headers.Add("Content-Type", "binary/octet-stream")
      17. Dim uri As New Uri("http://deinserver/upload.php?d=" & TextBox2.Text)
      18. wc.UploadFileAsync(uri, "POST", TextBox1.Text)
      19. Catch ex As Exception
      20. MessageBox.Show(ex.Message)
      21. Button1.Enabled = True
      22. End Try
      23. End Sub
      24. Private Sub wc_UploadProgressChanged(ByVal sender As Object, ByVal e As System.Net.UploadProgressChangedEventArgs) Handles wc.UploadProgressChanged
      25. stopuhr.Stop()
      26. Label3.Text = Math.Round((e.BytesSent - temp) / 1024 / (stopuhr.ElapsedMilliseconds / 1000)) & " KB/s" 'Geschwindigkeit
      27. Label4.Text = Math.Round(e.TotalBytesToSend \ 1024) & " KB / " & Math.Round(e.BytesSent \ 1024) & " KB"
      28. If Not stopuhr.IsRunning Then
      29. If e.ProgressPercentage > 0 Then
      30. If Not ProgressBar1.Value = 100 Then
      31. ProgressBar1.Value = e.ProgressPercentage * 2 'Wieso mal 2?!... Komischerweise wird nur die hälfte angezeigt.
      32. Label5.Text = e.ProgressPercentage * 2 & "%"
      33. Else
      34. MessageBox.Show("Datei wurde erfolgreich hochgeladen")
      35. ProgressBar1.Value = 0
      36. Label3.Text = Nothing
      37. Label4.Text = Nothing
      38. Label5.Text = Nothing
      39. Button1.Enabled = True
      40. End If
      41. Else
      42. End If
      43. End If
      44. temp = e.BytesSent
      45. stopuhr.Restart()
      46. End Sub
      47. End Class


      So hier noch den PHP Upload mit abfrage nach Dateityp und Dateigröße.

      PHP-Quellcode

      1. <?php
      2. $uploaddir = $_POST['d'];
      3. //Dateityp und größe wird erst nach dem upload geprüft.
      4. if (($_FILES['file']['type'] == "image/gif")
      5. || ($_FILES['file']['type'] == "image/jpeg")
      6. || ($_FILES['file']['type'] == "image/pjpeg")
      7. && ($_FILES["file"]["size"] < 20000)) //Dateigröße angeben. Falls nicht gewollt einfach entfernen
      8. //Hier die Filter, dürfte klar sein was du hier ändern musst
      9. /*
      10. Als Beispiel füge ich nen 4ten hinzu
      11. if (($_FILES['file']['type'] == "image/gif")
      12. || ($_FILES['file']['type'] == "image/jpeg")
      13. || ($_FILES['file']['type'] == "image/pjpeg")
      14. || ($_FILES['file']['type'] == "image/pjpeg")
      15. && ($_FILES["file"]["size"] < 20000))
      16. Also im großen und ganzen nicht so schwer.
      17. */
      18. {
      19. if (is_uploaded_file($_FILES['file']['tmp_name']))
      20. {
      21. if (strlen($uploaddir) > 0)
      22. //Falls ein Verzeichnis angegeben wurde
      23. {
      24. $uploadfile = $uploaddir."/". basename($_FILES['file']['name']);
      25. } else {
      26. //Falls kein Verzeichnis angegeben wurde
      27. $uploadfile = basename($_FILES['file']['name']);
      28. }
      29. echo "File ". $_FILES['file']['name'] ." uploaded successfully. ";
      30. if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
      31. {
      32. echo "File is valid, and was successfully moved. ";
      33. }
      34. else
      35. print_r($_FILES);
      36. } else {
      37. echo "Upload Failed!!!";
      38. print_r($_FILES);
      39. }
      40. } else {
      41. echo "Nur so und so welche Dateien sind erlaubt"; //Was auch immer du einem "Falsch Uploader" sagen willst :D
      42. }
      43. ?>



      Die PHP-Datei in dem Archiv einfach auf den Webserver packen, und im Programm den Link anpassen.

      Bedanken nicht vergessen :D
      Dateien

      Dieser Beitrag wurde bereits 7 mal editiert, zuletzt von „Rinecamo“ ()

      kannst du vlt. ein Sample-Solution machen? Weilich hab keine Ahnung, wo ich das php hinschreiben soll.
      Außerdem stimmts doch, dass nicht jeder Webspace php überhaupt unterstützt, oder?

      Interessieren tut mich das v.a., weilich letztens gelernt habe, dass beim ftp-Upload (programmiertechnisch viel einfacher) die AnmeldeDaten unverschlüsselt übertragen werden.
      Also wer meinen router sniffen tut, kann anschließend auf meinem Webspace veranstalten, wozu er lust hat, und hat übrigens auch meinen arcor-account mit allem drum und dran.

      ErfinderDesRades schrieb:

      Also wer meinen router sniffen tut, kann anschließend auf meinem Webspace veranstalten, wozu er lust hat, und hat übrigens auch meinen arcor-account mit allem drum und dran.
      Oder wenn jemand dein Programm sniffen tut ^^.
      Ja, ich kann ein Sample Projekt beifügen.
      Das Problem bei dem PHP Script: Wenn jemand eine .php mit einem Schadcode hochläd kann er deinen Webspace zerstören! Also aufpassen oder eine Sperre für .php Daten reinschreiben!
      Gruß,
      Tobias


      willst du mit mir eine sprachphilosophische Debatte vom Zaun brechen (tun)?

      Da werdich aber schreiend davon rennen. ;)


      Ne, möchte ich nicht ^^

      Das Problem bei dem PHP Script: Wenn jemand eine .php mit einem Schadcode hochläd kann er deinen Webspace zerstören! Also aufpassen oder eine Sperre für .php Daten reinschreiben!
      Gruß,
      Tobias


      Ich bezweifle, dass ein PHP-Script einen Webspace (sprich Festplatte) zerstöhren kann.

      Desweiteren wollte ich noch anmerken, dass ich das Tutorial gut finde, da ich mittels fehlender PHP Kentnisse eines meiner Projekte aufgeben musste, aber jetzt wieder aufnehmen kann, danke dafür :]

      Das Tutorial ist auch ausreichend Kommentiert.

      Noch Etwas: Wenn du das Tutorial noch updates möchte ich dir noch eine Sicherheitserweiterung zeigen:

      Man benutzt im wc einen Refferer und beim PHP-Script gibt man an, dass nur dieser Ref hochladen darf.

      PHP-Quellcode

      1. <?php
      2. if($_SERVER['HTTP_USER_AGENT'] == "Ref")
      3. {
      4. //Upload - Script
      5. echo "Zugang akzeptiert !";
      6. }
      7. else
      8. {
      9. echo "Zugang verweigert !";
      10. }
      11. ?>


      Mfg Twerpyfie

      Edit: Danke, jetzt nerv ich meine Freundin immer mit diesem "tun" xD

      Ich tu sie jetzt auch gleich nochmal nerven wenn sie sich beruhigt hat.

      Sie tut das grad lesen und hat gesagt das sie mich gleich hauen tut -.-"

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Twerpyfie“ ()

      Twerpyfie schrieb:

      Ich bezweifle, dass ein PHP-Script einen Webspace (sprich Festplatte) zerstöhren kann.

      Ich meine nicht die Festplatte, sondern ich kann alle bestehenden Daten löschen, Passwörter einsehen deine Datenbank auslesen ... Fals es sich dabei um Kundendaten handelt kann ich dich noch erpressen usw.

      Deswegen ist mit soetwas enorme Vorsicht geboten!

      Gruß,
      Tobias

      äh - ich fürmeinteil bin libs eher abgeneigt.
      Jdfs. wenn keine Source dabei ist.
      Weil da lernt man nix draus.
      Und wenn manse nutzt, ist man ihren Bugs ausgeliefert.
      Selbst wenn eine Lib tatsächlich Bugfrei sein sollte (nicht eben häufig), weiß man bei Fehlverhalten nie sicher: ists ein Bug? ists falsche Bedienung? ists ein Bug, aber nicht ein Bug der Lib?
      Nun die Lib habe ich damals erstellt damit viele neulinge die ständig solche fragen dazu stellten sie möglichst einfach nutzen konnten. Hätte ich den Code dazu gestellt wäre ihnen nicht geholfen, dann kämen zwar vlt. nicht die Fragen "wie lade ich via post etwas hoch" sondern "wie binde ich den code ein" "ich versteh das nicht" "da kommt ein fehler" "das funktioniert nicht" sieht man ja an den meisten hier vorgestellen Codes die den Usern helfen sollen, dass sie damit nicht klar kommen. Eine Lib ist hier einfacherer zu handhaben.

      Ansonsten geb ich dir recht das Code definitiv besser ist.
      Ja, Code wäre dann halt auch OpenSource... Nur ich hab in letzter Zeit häufig gesehen, das ganz viele per FTP hochladen und das wie in vielen Threads schon beschrieben, ist es ziemlich unsicher.

      Ich bin halt auch lieber für Code, da ich es hasse noch irgendwelche Libs bei meinem Programm zu haben, es war halt einfach nur ne Idee.
      ^^

      Samus Aran schrieb:

      sollte man das kennen

      Sorry, ich habe mittm Vertrag über meine FlatRate einen Webspace als Dreingabe bekommen.

      Wie zum Kuckuck sollte ich irgendetwas kennen, was mit PHP oder RechteVergabe auf WebSpaces zu tun hat?

      Ich denke damit spreche ich als WebSpace-Noob für Millionen von Kunden, die ebenfalls WebSpace-Noobs sind, und sicherlich noch viel weniger für ihre Unwissenheit können als ich.