videouploader.tk
- proces video uploaden
- uiterlijk
- wat kan ik er nog aan toevoegen?
Test website: http://videouploader.tk/
PS: video uploaden mag uiteraard!
Ook mis ik de voorwaarden voor je site, want het lijkt mij niet de bedoeling om auteursrechtelijke video's te uploaden. Hoe ga je dit tegen? Onthoud wel dat jij verantwoordelijk wordt gesteld.
En wat maakt dit beter dan Dailymotion, Vimeo en YouTube?
Ik neem aan dat het puur een oefenprojectje is?
Toevoeging op 25/12/2017 09:50:08:
De website is nu offline?
Gewijzigd op 25/12/2017 00:27:52 door - Ariën -
Ja, iemand heeft een bestand geupload waardoor de site plat lag.
Er is dus nog werk aan de winkel.
Daar had ik je geloof ik in een vorig topic al gewaarschuwd ;-)
Lijkt mij niet de bedoeling.
En exit() en die() is niet netjes.
Gewijzigd op 15/01/2018 18:12:45 door - Ariën -
Iemand dit die PHP script op een nettere manier kan schrijven?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
if(isset($_POST['submit']))
{
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$filetype = $_FILES['file']['type'];
if ($filetype != 'video/mp4') {
exit('<center>Stop, only MP4!</center>');
}
move_uploaded_file($temp,"uploaded/".$name);
$url = "http://videouploader.tk/uploaded/$name";
$db->query("INSERT INTO `videos` VALUES ('','$name','$url')");
$query = $db->query("SELECT * FROM videos WHERE name = '".$name."'");
$row = $query->fetch_assoc();
echo "<center>Your upload is created <a href='watch.php?id=".$row['id']. "' target='blank_'>CLICK</a></center>";
}
?>
if(isset($_POST['submit']))
{
$name = $_FILES['file']['name'];
$temp = $_FILES['file']['tmp_name'];
$filetype = $_FILES['file']['type'];
if ($filetype != 'video/mp4') {
exit('<center>Stop, only MP4!</center>');
}
move_uploaded_file($temp,"uploaded/".$name);
$url = "http://videouploader.tk/uploaded/$name";
$db->query("INSERT INTO `videos` VALUES ('','$name','$url')");
$query = $db->query("SELECT * FROM videos WHERE name = '".$name."'");
$row = $query->fetch_assoc();
echo "<center>Your upload is created <a href='watch.php?id=".$row['id']. "' target='blank_'>CLICK</a></center>";
}
?>
Mvg,
Mitchell
Edit:
Ik heb code-tags geplaatst. Gelieve dit in het vervolg zelf toe te voegen aan je bericht.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Zie ook: Veel gestelde vragen: Welke UBB-codes kan ik gebruiken.
Gewijzigd op 19/01/2018 13:25:12 door - Ariën -
- je controleert niet of $_FILES fouten bevat
- je controleert niet of het opgegeven MIME-formaat (vaak enkel gebaseerd op extentie) wel juist is, hier bestaan libraries voor volgens mij, die met een zekere mate van waarschijnlijkheid kunnen vertellen van wat voor MIME-formaat een bestand daadwerkelijk is
- escaping van de DATA in de SQL statements ontbreekt volledig
- je maakt een volledige URL aan ($url), waarom niet gewoon een random naam/hash als een soort tinyurl naar het bestand? wat als de site straks verhuist? zorg dat je site/data verplaatsbaar is en blijft
- je maakt een volledige URL aan ($url), maar verwijst dan naar het bestand via een id (watch.php)? wat is dan het verschil tussen deze twee URLs?
- hoe zit het met eigenaarschap van de video's? kan iemand nog iets aanpassen of verwijderen?
Gewijzigd op 19/01/2018 13:37:40 door Thomas van den Heuvel
Ook raad ik aan om elke video te voorzien van een unieke bestandsnaaam, en niet de naam die iemand zelf bedenkt. Hiermee is het nu mogelijk om video's te overschrijven, wat zeker niet wenselijk is. Een controle met file_exist() zou ook kunnen, maar een unieke naam lijkt mij het veiligste.
Zie ook: https://www.acunetix.com/websitesecurity/upload-forms-threat/
Ook is je foutafhandeling afwezig. Stel dat je geen schrijfrechten hebt, of dat het bestand te groot is. De upload stopt, maar de data wordt gewoon in de database geschreven en iedereen ziet een video niet werkt, omdat die niet bestaat! Dus zorg voor goede foutafhandeling. In de $_FILES['file']['error'] staat ook statuscodes vermeld na een upload. Hier kan je aan afleiden of de upload gelukt is of juist niet en wat de reden daarvan in. En dan kan je dit loggen, of aan de gebruiker mededelen (net wat relevant is voor hem, want issues met schrijfrechten zijn voor hem niet interessant en dus kan je beter een algemene melding geven over een technische fout).
Uiteraard log je alle fouten netjes. Ideaal als je gebruiker komt klagen over zijn/haar upload die niet werkte.
Ikzelf gebruik in mijn eigen CMS de Verot-class voor uploaden. Deze is zeer veilig en kent diverse handige opties en alles is ingebouwd, en standaard is hij ook zeer veilig naar mijn mening.
Dus genoeg werk om je script aan te pakken.
Als je het helemaal mooi wilt doen, dan gebruik je ook meteen ffmpeg om video's mee te converteren naar mp4. Als iemand nu een wmv of asf upload, dan kan je dit meteen omzetten naar mp4. Verder kan je ook verschillende resoluties genereren van je video's. Ideaal voor mensen op mobieltjes, zodat ze niet teveel bandbreedte gebruiken.
Wat ik ook kan aanraden is een goede player, zoals JWplayer of Video.js. De laatste gebruik ik en daar ben ik tevreden over.
Kost behoorlijk wat geheugenruimte en laadtijd op de server.
Daarnaast krijg je te maken met rechthebbenden.
En de Stichting Brein (Antipiracy tegenwoordig) is daar echt streng mee.
En zoals aangegeven ook nog de voorwaarden om te kunnen uploaden.
Ik ben zelf met website bezig waar youtube linkjes in lijst geplaatst kunnen worden.
De benodigde gegevens worden eruit gevist (de VIDEO_ID's).
En met een regel maak je een afspeelbare anonieme embedded speellijst.
Youtube levert ook de afbeeldingen om op de website te plaatsen.
Zodat de video pas geladen wordt als er op geklikt wordt.
Wil je meer? er is ook een Youtube api bij github.
Dit is voorbeeld van Elvis die je in de browser kunt afspelen, maar ook op de site:
https://www.youtube.com/embed/VIDEO_ID?playlist=PU5xxh5UX4U,Yf2KtxEtsEM,e8jAqvmnsIk,SBmAPYkPeYU,BeTurYZuY4A
Je zier hier ook echter de minnen. Een youtubeaccount kan instellen om embedded te blokken.
En er zijn landen die bepaalde video's niet tonen. Of uitsluitend in youtube zelf.
Maar bij eigen leden heb je daar geen last van uiteraard.
Gewijzigd op 19/01/2018 16:24:56 door Hans De Ridder
Het zou vervelend zijn als jij of je hosting opeens een flinke rekening van vele honderden euro's zou krijgen van een groot bedrijf. Jij bent namelijk aansprakelijk hiervoor omdat jij de video's bewaart. En een DCMA-formuliertje gaat je echt niet helpen om je tegen deze grote bedrijven te beschermen.
Dus denk er goed over na. Want nu waag je je op zeer glas ijs, en het is zonde en jammer als je door een flinke claim onderuit zou gaan.
Ik begrijp dat dit een leuke oefening voor je is, maar zet het liever niet publiek, of je moet echt een zeer goede moderatie achter de hand hebben om elke video te controleren op de rechten. Bij YouTube gebeurt dit automatisch via een 'fingerprint-systeem' plus dat zij miljoenen dollars uitgeven om video's te mogen plaatsen (daarom kunnen wij daar gewoon genieten van de muziek van onder meer Ed Sheeran, Eminem, Taylor Swift, Image Dragons, Bruno Mars en Katy Perry).
Gewijzigd op 19/01/2018 16:41:29 door - Ariën -
En je kunt zelfs ook aansprakelijk worden gesteld, ondanks dat Youtube rechten betaalt.
Meestal krijg je eerst netjes bericht om de video te verwijderen.
Maar heb toch in de artiestenwereld meegemaakt dat echt de rechten geschonden werden door
liedje te zingen van een ander. Je kunt gepakt worden op tekst, beeld, orkestband, enz.
Ook youtube is geen vrijbrief om te doen wat je goeddunkt.
Maar dan moet je eerst wel gewaarschuwd zijn.
Nu kreeg ik in de console de foutmelding:
Failed to load https://googleads.g.doubleclick.net/pagead/id?exp=nomnom: Redirect from 'https://googleads.g.doubleclick.net/pagead/id?exp=nomnom' to 'data:text;charset=utf-8,' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://www.youtube.com' is therefore not allowed access.
De ads worden bij mij tegengehouden door de addblocker.
Moet ik me iets aantrekken van die melding?
Want scriptje werkt prima.
En niet iedereen zal in broswer bij de console gaan kijken of iets mag...
Je laadt iets van een externe site in wat niet mag. Dus het is verstandig om dit op te lossen. Kan je uitleggen wat je precies doet?
(Ik heb begrepen dat Google daar mee stopt)
En waarschijnlijk zit er ook een balkje in de video.
De geinstalleerde addblocker op mijn PC houdt dat tegen.
Voor mij prima, maar voor de reclame van youtube minder, haha.
Toevoeging op 26/01/2018 14:01:10:
Ook de video's die je uitsluitend in volledig scherm mag zien, doen het prima.
In scriptje heb ik vooral de lengte van de video nodig.
Maar dat werkt niet.
Script is gevonden hoor.
Code (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
27
28
29
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
<?php
$url = 'https://www.youtube.com/watch?v=vdufteeVZyo';
$data = json_decode(file_get_contents('http://api.rest7.com/v1/youtube_info.php?url=' . $url));
if (@$data->success !== 1)
{
die('Failed');
}
//echo 'Video ID=' . $data->id . '<br>';
echo 'Title=' . $data->title . '<br>';
echo 'Duration sec=' . $data->duration. '<br>';
//echo 'Thumbnail 1 URL=' . $data->thumb1_url . '<br>';
//rest of the thumbnails:
echo '<pre>';
print_r($data);
preg_match('/[\\?\\&]v=([^\\?\\&]+)/', $url, $matches);
$id = $matches[1];
$width = '800px';
$height = '450px';
?>
<html>
<body>
<iframe id="ytplayer" type="text/html" width="<?php echo $width ?>" height="<?php echo $height ?>"
src="https://www.youtube.com/embed/<?php echo $id ?>?rel=0&showinfo=0&color=white&iv_load_policy=3"
frameborder="0" allowfullscreen></iframe>
</body>
</html>
$url = 'https://www.youtube.com/watch?v=vdufteeVZyo';
$data = json_decode(file_get_contents('http://api.rest7.com/v1/youtube_info.php?url=' . $url));
if (@$data->success !== 1)
{
die('Failed');
}
//echo 'Video ID=' . $data->id . '<br>';
echo 'Title=' . $data->title . '<br>';
echo 'Duration sec=' . $data->duration. '<br>';
//echo 'Thumbnail 1 URL=' . $data->thumb1_url . '<br>';
//rest of the thumbnails:
echo '<pre>';
print_r($data);
preg_match('/[\\?\\&]v=([^\\?\\&]+)/', $url, $matches);
$id = $matches[1];
$width = '800px';
$height = '450px';
?>
<html>
<body>
<iframe id="ytplayer" type="text/html" width="<?php echo $width ?>" height="<?php echo $height ?>"
src="https://www.youtube.com/embed/<?php echo $id ?>?rel=0&showinfo=0&color=white&iv_load_policy=3"
frameborder="0" allowfullscreen></iframe>
</body>
</html>
Waarom gebruik je niet de rechtstreekse Youtube API?
Dan moet ik weer wat verzinnen om daarna weer een nieuwe lijst in te geven van 50.
Ik had een embedded versie. Maar die blokkeert wel de fimpjes en de verboden video's.
Dan moeten die op volledig beeld worden afgespeeld.
Dus ben nu aan het kijken wat de beste optie is om max. 200 video's af te spelen.
Zoveel kunnen leden per categorie max. ingeven.
Dat is/was ook de limiet die youtube heeft/had.
Leg anders even uit wat je precies wilt bouwen.
Ik werk met allemaal losse video ID's.
Er worden door leden allemaal persoonlijke lijsten aangelegd. (kopieren/plakken)
Die video ID's sla ik allemaal op per lid en per categorie.
Dat is allemaal klaar.
Ik verwerkte het als volgt:
Code (php)
1
https://www.youtube.com/embed/VIDEO_ID?playlist=PU5xxh5UX4U,Yf2KtxEtsEM,e8jAqvmnsIk,SBmAPYkPeYU,BeTurYZuY4A
Dit kan bij mij gaan tot 200 video's.
En die draaide ik via embed player.
Je kunt die link ook rechtstreeks in je browser stoppen.
Dan zie je dus dat aantal video's geblokkeerd zijn.
Terwijl ze wel in volledig scherm afspelen.
Ik moet de API nog eens bekijken.
Geloof dat die speelt met echte afspeellijsten, die je via youtube zelf maakt.
Dat doe ik dus niet.
Maar ben aan de studie....
Gewijzigd op 26/01/2018 15:34:01 door - Ariën -