Uploadscript mit Linkausgabe

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Uploadscript mit Linkausgabe

    Hey,
    ich bastel gerade an einem Uploadscript für unsere private Homepage, auf der unsere Freunde ihre Urlaubsvideos hochladen können.
    Mit Hilfe von php-einfach.de bin ich nun schon so weit, dass die Datei erfolgreich hochgeladen wird (wenn <50 MB und avi Format).
    Nun will ich jedoch (nach erfolgreichem Upload) einen Link ausgeben (so wie z.B. auf rapidshare), auf den unsere Freunde nur klicken müssen und schon erscheint eine neue Seite, in der das Video beispielsweise in den DivX-Webplayer eingebettet ist und sie es direkt online anschauen können.
    Bisher habe ich es nur geschafft, dass ein direkter Link zur Videodatei ausgegeben wird, sodass man sich das Video nur herunterladen kann.
    Anbei mein Script (serverseitig):

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Urlaubsvideo-Upload</title>
    6. <?php
    7. $dateiname = "Urlaubsvideo-Upload/".$_FILES['datei']['name'];
    8. $allowed_mime = array("video/avi","video/x-msvideo","video/msvideo");
    9. ?>
    10. </head>
    11. <body>
    12. <?php
    13. if($_FILES['datei']['size'] < 52428800 AND in_array($_FILES['datei']['type'],$allowed_mime))
    14. {
    15. move_uploaded_file($_FILES['datei']['tmp_name'], "Urlaubsvideo-Upload/".$_FILES['datei']['name']);
    16. echo "Dein Urlaubsvideo wurde erfolgreich hochgeladen. Hier der Link, damit du es direkt online anschauen kannst: <a href:"/dir/$dateiname"> Dein Link </a>";
    17. }
    18. else
    19. {
    20. echo "Dein Ulaubsvideo darf nicht größer als 50 MB sein und muss im AVI-Formart sein!";
    21. }
    22. ?>
    23. </body>
    24. </html>
    Alles anzeigen


    Habt ihr Ideen und könnt mir helfen?
    Vielen Dank schon einmal im voraus! :)
    Lg
  • Mein Vorschlag:

    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Urlaubsvideo-Upload</title>
    6. </head>
    7. <body>
    8. <?php
    9. $dateiname = "Urlaubsvideo-Upload/".$_FILES['datei']['name'];
    10. $filename = $_FILES['datei']['name'];
    11. $allowed_mime = array("video/avi","video/x-msvideo","video/msvideo");
    12. if($_FILES['datei']['size'] < 52428800 AND in_array($_FILES['datei']['type'],$allowed_mime)) {
    13. move_uploaded_file($_FILES['datei']['tmp_name'], "Urlaubsvideo-Upload/".$_FILES['datei']['name']);
    14. echo "Dein Urlaubsvideo wurde erfolgreich hochgeladen. Hier der Link, damit du es direkt online anschauen kannst: <a href="/dir/$dateiname/"> Dein Link </a>";
    15. echo '<a href="deineneueseite.php?filname=$filename">Video anschauen!</a>';
    16. }else{
    17. echo "Dein Ulaubsvideo darf nicht gr&ouml;&szlig;er als 50 MB sein und muss im AVI-Formart sein!";
    18. }
    19. ?>
    20. </body>
    21. </html>
    Alles anzeigen



    deineneueseite.php => nenn sie wie du willst, änder sie nur nachher auch im ahref tag "Video anschauen!"

    Quellcode

    1. <?
    2. $filename=$_GET['filename'];
    3. echo '<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="xxx" height="xxx" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
    4. <param name="custommode" value="none" />
    5. <param name="autoPlay" value="false" />
    6. <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.$filename.'">
    7. <embed type="video/divx" src="http://deineseite.de/Urlaubsvideo-Upload/'.$filename.'" custommode="none" width="500" height="520" autoPlay="false" pluginspage="http://go.divx.com/plugin/download/">
    8. </embed>
    9. </object>
    10. <br>No video? Get the DivX Web Player for <a style="text-decoration: underline;" href="http://download.divx.com/player/DivXWebPlayerInstaller.exe">Windows</a> or <a style="text-decoration: underline;" href="http://download.divx.com/player/DivXWebPlayer.dmg">Mac</a>
    11. ';
    12. ?>
    Alles anzeigen


    Quellcode

    1. width="xxx" height="xxx" => anpassen
    2. <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.$filename.'"> => deineseite.de => anpassen
    3. <embed type="video/divx" src="http://deineseite.de/Urlaubsvideo-Upload/ => deineseite.de => anpassen
  • Hey,
    also irgendwie funktioniert des net so ganz.
    Ich bekomm zwar den Link zu "Video anschauen" und daraufhin erscheint ebenfalls der DivX-Webplayer in der eingebundenen Seite, jedoch spielt er das Video net ab.
    Oben in der Adresszeile steht auch noch

    Quellcode

    1. .../deineneueseite.php?filename=$filename
    und im Quellcode beim Player ebenfalls

    Quellcode

    1. $filename
    .
    Die Fehlermeldung beim DivX-Webplayer ist irgendwas mit "404: File cannot be found.".
    Irgendwie hab ich so das Gefühl, als ob die Variable $filename net weitergegeben wird?!
    Hast du/habt ihr noch Ideen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von die_maske ()

  • 1. Logischer Fehler / Syntax Fehler
    In single quotes werden variabeln nicht geparst, das geschieht nur in double quotes.

    2. Sicherheit
    Im dateinamen können sich gegebenenfalls sonderzeichen befinden, die den htmlcode ändern würden. (Oder vielleicht sogar XSS). Dafür habe ich htmlentities hinzugefügt.

    3. Sicherheit
    Der MIME type wird vom browser übergeben, ist desshalb problemlos zu faken, wesshalb man problemlos eine php-datei uploaden könnte!!


    Quellcode

    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    5. <title>Urlaubsvideo-Upload</title>
    6. </head>
    7. <body>
    8. <?php
    9. $dateiname = "Urlaubsvideo-Upload/".$_FILES['datei']['name'];
    10. $filename = $_FILES['datei']['name'];
    11. $allowed_mime = array("video/avi","video/x-msvideo","video/msvideo");
    12. if($_FILES['datei']['size'] < 52428800 AND in_array($_FILES['datei']['type'],$allowed_mime)) //<----- DIESE PRÜFUNG IST NICHT SICHER
    13. {
    14. move_uploaded_file($_FILES['datei']['tmp_name'], "Urlaubsvideo-Upload/".$_FILES['datei']['name']);
    15. echo 'Dein Urlaubsvideo wurde erfolgreich hochgeladen. Hier der Link, damit du es direkt online anschauen kannst: <a href="/dir/'.htmlentities($dateiname,ENT_QUOTES).'/"> Dein Link </a>';
    16. echo '<a href="deineneueseite.php?filename='.htmlentities($filename,ENT_QUOTES).'">Video anschauen!</a>';
    17. }
    18. else
    19. {
    20. echo 'Dein Ulaubsvideo darf nicht gr&ouml;&szlig;er als 50 MB sein und muss im AVI-Formart sein!';
    21. }
    22. ?>
    23. </body>
    24. </html>
    Alles anzeigen


    4. Sicherheit
    Auch in der 2ten datei htmlentities:

    5. Verbesserung / Performance
    "<?" sollte nicht verwendet werden, da viele leute short open tags aus haben (z.B. ich ^^), da <? für XML reserviert ist und auch für X-HTML benötigt wird.

    Quellcode

    1. <?php
    2. $filename=$_GET['filename'];
    3. echo '<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="xxx" height="xxx" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
    4. <param name="custommode" value="none" />
    5. <param name="autoPlay" value="false" />
    6. <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.htmlentities($filename,ENT_QUOTES).'">
    7. <embed type="video/divx" src="http://deineseite.de/Urlaubsvideo-Upload/'.htmlentities($filename,ENT_QUOTES).'" custommode="none" width="500" height="520" autoPlay="false" pluginspage="http://go.divx.com/plugin/download/">
    8. </embed>
    9. </object>
    10. <br>No video? Get the DivX Web Player for <a style="text-decoration: underline;" href="http://download.divx.com/player/DivXWebPlayerInstaller.exe">Windows</a> or <a style="text-decoration: underline;" href="http://download.divx.com/player/DivXWebPlayer.dmg">Mac</a>';
    11. ?>
    Alles anzeigen


    Und wie bereits von Snowflake gesagt:
    width="xxx" height="xxx" => anpassen
    <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.$filename.'"> => deineseite.de => anpassen
    <embed type="video/divx" src="http://deineseite.de/Urlaubsvideo-Upload/ => deineseite.de => anpassen


    //Ungetestet!!!

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von GanjaLatte ()

  • BennyBunny schrieb:

    auf der unsere Freunde ihre Urlaubsvideos hochladen können.


    Is klar ;)


    Genau deswegen hatte ich auch keine Absicherungen der Variablen vorgenommen.. aber naja kann ja nicht schaden :P


    @GanjaLatte achja die syntaxfehler -_- sry, den fehler mach ich öfters, wenn ich es nicht im editor code ^^

    aber zu punk 3. Sicherheit. Welchen Vorschlag hättest du denn zu machen, dass ganze sicherer zu gestalten?
    Kenne auch nur diese Art das Script abzusichern. Aber aufjedenfall ist es noch sicherer, als nur die endung auf richtigkeit zu überprüfen. ^^

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Snowflake ()

  • die_maske schrieb:

    Hey,
    Genau deswegen hatte ich auch keine Absicherungen der Variablen vorgenommen.. aber naja kann ja nicht schaden

    wie kann ich die Variablen absichern, weil so verändet sich jede "deineneueseite.php" nach dem jeweiligen upload.
    Danke :)


    Copy&Past ist doof ;)
    Hast du dir den beitrag von GanjaLatten nicht durchgelesen? Du sollst doch auch was lernen

    abgesichert durch:

    Quellcode

    1. .htmlentities($filename,ENT_QUOTES)

    "
    htmlentities — Wandelt alle geeigneten Zeichen in entsprechende HTML-Codes um
    "
    das heißt z.b. aus ö wird &ouml;



    Cool philippgerard, werd das mal auf meinem webspace probieren, da läuft linux drauf, beste vorraussetungen :P
    Klingt nach einer guten idee, dass verzeichnis einfach vom php-paser zu nehmen. Und sicherer geht es wohl nicht. Danke :)
  • Doch, hab den Beitrag durchgelesen, leider net gut genug :(
    Steht wirklich alles schön drin.
    Habs jetzt so hinbekommen wie gewollt.
    Jetzt hab ich nur noch ein Problem, nämlich, dass ich des Script in dem angegebenen Ornder zwar ausführen kann, lager ich nun einen Teil aus

    vorher: (funktioniert)

    Quellcode

    1. echo '<a href="deineneueseite.php?filename='.htmlentities($filename,ENT_QUOTES).'">Video anschauen!</a>';


    nachher: (funktioniert nicht)

    Quellcode

    1. echo '<a href="http://www.meineseite.de/dir/upload/videos/deineneueseite.php?filename='.htmlentities($filename,ENT_QUOTES).'">Video anschauen!</a>';

    so gibt er mir zwar immer noch einen Link aus, jedoch wenn ich auf diesen klicke, so öffnet sich lediglich eine leere Seite.
    Pfadangaben müssten auch alle stimmen, oder muss ich irgendwie en ganz speziellen Pfad verwenden?
    Danke :)
  • Sieht jetzt so okay für mich aus...aber

    1. Wieso willst du die datei in den ordner legen wo die videos geuploaded werden
    2. Was sagt denn der geparste quelltext... Ansicht => Seiten Quelltext oder so ähnlich..ist (immer brower abhängig anders formuliert)



    Ansonsten um zu gucken, ob überhaupt was ankommt, kannst du in der "deineneueseite.php"
    einmal mal unter

    Quellcode

    1. $filename=$_GET['filename']


    ein print_r($filename); schreiben und dann nochmal was hochladen, und gucken ob er dir was ausgibt.
  • die_maske schrieb:

    Hey,
    wieso wir der Name im Titel net dauerhaft gespeichert, wenn ich

    Quellcode

    1. <title> <?php echo "$filename"; ?> </title>

    einfüge?


    $filename wird erst nach abschicken von dem upload formular generiert.

    Das ganze läuft so ab. Du lädst eine datei hoch... in $filename steht dann der dateiname für die eine Post sitzung.

    <a href=\"deineneueseite.php?filname=$filname\">Video</a> überträgt den name in der datei in der adressleiste, und auf der neue seite wird dieser per GET wieder geholt.
    Das heißt, wenn $filename leer ist, (und das ist er immer..außer du lädst eine datei hoch) ist der titel auch leer.
  • die_maske schrieb:

    Kann ich den dann net irgendwie "statisch" reinbekommen?


    Hä? Ich versteh gerade nich was du meinst...Wenn kein Filename da ist, gibt es kein Filename im Titel..Was willst du da statisch machen?

    Hat doch gar keinen Sinn, die Seite (deineneueseite.php) aufzurufen, wenn keine Datei geuploaded wurde, da auch kein Video angezeigt wird.
    Wenn du die Seite weiterhin aufrufen willst nachdem du die Datei geuploaded hast, würde ich dir einfach empfehlen den video ordner auslesen zu lassen, und dann die Links demensprechend ausgeben zu lassen.