You are not logged in.

  • Login

1

Friday, August 15th 2008, 12:46pm

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):

PHP Quellcode

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
27
28
29
30
31
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Urlaubsvideo-Upload</title>
<?php
$dateiname = "Urlaubsvideo-Upload/".$_FILES['datei']['name'];
$allowed_mime = array("video/avi","video/x-msvideo","video/msvideo");
?>
</head>
 
<body>
<?php
 
 
   if($_FILES['datei']['size'] <  52428800 AND in_array($_FILES['datei']['type'],$allowed_mime))
      {
      move_uploaded_file($_FILES['datei']['tmp_name'], "Urlaubsvideo-Upload/".$_FILES['datei']['name']);
      echo "Dein Urlaubsvideo wurde erfolgreich hochgeladen. Hier der Link, damit du es direkt online anschauen kannst: <a href:"/dir/$dateiname"> Dein Link </a>";
      }
 
   else
      {
         echo "Dein Ulaubsvideo darf nicht größer als 50 MB sein und muss im AVI-Formart sein!";
      }
 
 
?> 
 
</body>
</html>


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

2

Friday, August 15th 2008, 1:34pm

Mein Vorschlag:

PHP Quellcode

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



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

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
$filename=$_GET['filename'];
 
echo '<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="xxx" height="xxx" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
 
 <param name="custommode" value="none" />
 
  <param name="autoPlay" value="false" />
  <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.$filename.'">
 
<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/">
</embed>
</object>
<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>
';
?>


PHP Quellcode

1
2
3
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

3

Friday, August 15th 2008, 1:43pm

Sehr nett von dir :)
Ich werd's gleich mal ausprobieren!

4

Friday, August 15th 2008, 2:02pm

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

PHP Quellcode

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

PHP 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?

This post has been edited 1 times, last edit by "die_maske" (Aug 15th 2008, 2:07pm)


5

Friday, August 15th 2008, 4:26pm

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!!


PHP Quellcode

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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Urlaubsvideo-Upload</title>
</head>
 <body>
<?php
$dateiname	= "Urlaubsvideo-Upload/".$_FILES['datei']['name'];
$filename      	= $_FILES['datei']['name'];
$allowed_mime 	= array("video/avi","video/x-msvideo","video/msvideo");
 
if($_FILES['datei']['size'] <  52428800 AND in_array($_FILES['datei']['type'],$allowed_mime))   //<----- DIESE PRÜFUNG IST NICHT SICHER
{
    move_uploaded_file($_FILES['datei']['tmp_name'], "Urlaubsvideo-Upload/".$_FILES['datei']['name']);
    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>';
    echo '<a href="deineneueseite.php?filename='.htmlentities($filename,ENT_QUOTES).'">Video anschauen!</a>';
}
else
{
    echo 'Dein Ulaubsvideo darf nicht gr&ouml;&szlig;er als 50 MB sein und muss im AVI-Formart sein!';
}
?> 
 
</body>
</html>


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.

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
$filename=$_GET['filename'];
 
echo '<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="xxx" height="xxx" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">
 
 <param name="custommode" value="none" />
 
  <param name="autoPlay" value="false" />
  <param name="src" value="http://deineseite.de/Urlaubsvideo-Upload/'.htmlentities($filename,ENT_QUOTES).'">
 
<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/">
</embed>
</object>
<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>';
?>


Und wie bereits von Snowflake gesagt:

Quoted

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!!!

This post has been edited 4 times, last edit by "GanjaLatte" (Aug 16th 2008, 1:02pm)


6

Friday, August 15th 2008, 4:41pm

Perfekt!
Es funktioniert!
Vielen vielen Dank! :)

7

Saturday, August 16th 2008, 1:09pm

Quoted

auf der unsere Freunde ihre Urlaubsvideos hochladen können.


Is klar ;)

8

Sunday, August 17th 2008, 5:30pm

Quoted

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. ^^

This post has been edited 1 times, last edit by "Snowflake" (Aug 17th 2008, 5:38pm)


9

Sunday, August 17th 2008, 6:33pm

Mein Tipp: Mittels .htaccess (vorausgesetzt es ist kein Windows-Server) das Verzeichnis, in dem Du die Uploads speicherst, vom PHP-Parser ausnehmen:

Source code

1
SetHandler send-as-is


Nun kann jeder so viele PHP-Dateien durch gefakte Mime-Codes hochladen wie er will, ausführen lässt sich keine davon.

10

Sunday, August 17th 2008, 6:54pm

Hey,

Quoted

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 :)

11

Sunday, August 17th 2008, 7:39pm

Hey,

Quoted

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:

PHP Quellcode

1
.htmlentities($filename,ENT_QUOTES)

"

Quoted

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 :)

12

Monday, August 18th 2008, 1:54am

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)

PHP Quellcode

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


nachher: (funktioniert nicht)

PHP 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 :)

13

Monday, August 18th 2008, 2:57am

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

PHP Quellcode

1
$filename=$_GET['filename']


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

14

Monday, August 18th 2008, 2:46pm

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

PHP Quellcode

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

einfüge?

15

Monday, August 18th 2008, 5:18pm

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

PHP 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.

16

Monday, August 18th 2008, 5:22pm

Kann ich den dann net irgendwie "statisch" reinbekommen?

17

Monday, August 18th 2008, 6:03pm

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.

18

Thursday, August 21st 2008, 6:40pm

Hey,
manche Leute können bei mir keine .avi-Dateien hochladen (also sie bekommen ne Fehlermeldung), obwohl der Quellcode wie oben angegeben ist.

PHP Quellcode

1
$allowed_mime = array("video/avi","video/x-msvideo","video/msvideo");

Hab ich was falsch gemacht? Kanns an deren Browser liegen?
Danke :)

19

Thursday, August 21st 2008, 6:46pm

Gib den Benutzern einfach aus, welchen Mimetype sie verwenden:

PHP Quellcode

1
echo $_FILES['datei']['type'];

20

Thursday, August 21st 2008, 6:58pm

.avi-Dateien können ja auch DIVX-Dateien sein etc. - ich denke mal, die geben einen anderen MIME-Typ aus.

Similar threads

Social bookmarks