Automatisch URL aanmaken
Zoals je hier zien staat er een upload page waar je filmpjes kunt uploaden.
Nu zou ik graag willen dat als iemand een filmpje upload dat er automatisch na de /..... tekst word aangemaakt als iemand een filmpje upload.
Website: *knip*
Thanks.
Gewijzigd op 29/04/2020 23:19:24 door - Ariën -
Je wilt dus een uniek ID aan de video koppelen, zodat je je deze op je site kan oproepen. Net zoals YouTube ook doet?
Klopt Ariën!
In dat geval is een getal wel leuk en aardig, maar het is erg voorspelbaar, iets wat je niet altijd wilt hebben. Daarom moet je een hash genereren aan de hand van dat ID-nummer.
Deze class kan dit heel mooi voor je doen:
https://github.com/ivanakimov/hashids.php
Gewijzigd op 23/11/2017 23:10:36 door - Ariën -
Ik ben nog een basis PHP gebruiker dus meer uitleg zal nooit kwaad doen.
Een kwestie van de hele mikmak downloaden, en beginnen bij de 'Quick Example'. (of je moet met Composer werken, dan mag je al met Getting Started beginnen).
Een random string kun je op 100-en verschillende manier maken, en als het echt super random moet kan het altijd beter, maar heel eenvoudig kan het bijvoorbeeld zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$n = 10; //lengte van de code
//optie 1: via sha1
//enkel hex karakters (0-9 en a-f)
print(substr(sha1(time() . rand()),0,$n));
//alfa+numeriek (0-9 en a-z)
print(substr(base_convert(sha1(time() . rand()),16,36),0,$n));
//optie 2: via rand
//hiermee heb je meer controle over de gebruikte karakters
//als je bijvoorbeeld wilt voorkomen dat 1 en l tot verwarring leiden
$chars = '23456789abcdefghijkmnpqrstuvwxyz';
$max = strlen($chars) - 1;
$s = '';
for($i = 0; $i < 10; $i++) $s .= $chars[rand(0,$max)];
print($s);
?>
$n = 10; //lengte van de code
//optie 1: via sha1
//enkel hex karakters (0-9 en a-f)
print(substr(sha1(time() . rand()),0,$n));
//alfa+numeriek (0-9 en a-z)
print(substr(base_convert(sha1(time() . rand()),16,36),0,$n));
//optie 2: via rand
//hiermee heb je meer controle over de gebruikte karakters
//als je bijvoorbeeld wilt voorkomen dat 1 en l tot verwarring leiden
$chars = '23456789abcdefghijkmnpqrstuvwxyz';
$max = strlen($chars) - 1;
$s = '';
for($i = 0; $i < 10; $i++) $s .= $chars[rand(0,$max)];
print($s);
?>
Hoe zou ik dat hier in moeten verwerken?
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
30
31
32
33
34
35
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
32
33
34
35
<form method="post" enctype="multipart/form-data" >
<?php
if(isset($_FILES['file'])){
$name = $_FILES['file']['name'];
$extension = explode('.', $name);
$extension = end($extension);
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
$random_name = rand();
$tmp = $_FILES['file']['tmp_name'];
if ((strtolower($type) != "video/mpg") && (strtolower($type) != "video/wma") && (strtolower($type) != "video/mov")
&& (strtolower($type) != "video/flv") && (strtolower($type) != "video/mp4") && (strtolower($type) != "video/avi")
&& (strtolower($type) != "video/qt") && (strtolower($type) != "video/wmv") && (strtolower($type) != "video/wmv"))
{
$message= "Video Format Not Supported !";
}else
{
move_uploaded_file($tmp, 'upload/'.$random_name.'.'.$extension);
$conn->query("insert into videos (title,location) values ('$name','$random_name.$extension')");
$message="Video Uploaded Successfully!";
}
?>
<?php
echo "<script type='text/javascript'>alert('$message\\n\\nUpload: $name\\nSize: $size\\nType: $type\\nStored in: uploads/$name');</script>";
?>
<?php
}
?>
<?php
if(isset($_FILES['file'])){
$name = $_FILES['file']['name'];
$extension = explode('.', $name);
$extension = end($extension);
$type = $_FILES['file']['type'];
$size = $_FILES['file']['size'];
$random_name = rand();
$tmp = $_FILES['file']['tmp_name'];
if ((strtolower($type) != "video/mpg") && (strtolower($type) != "video/wma") && (strtolower($type) != "video/mov")
&& (strtolower($type) != "video/flv") && (strtolower($type) != "video/mp4") && (strtolower($type) != "video/avi")
&& (strtolower($type) != "video/qt") && (strtolower($type) != "video/wmv") && (strtolower($type) != "video/wmv"))
{
$message= "Video Format Not Supported !";
}else
{
move_uploaded_file($tmp, 'upload/'.$random_name.'.'.$extension);
$conn->query("insert into videos (title,location) values ('$name','$random_name.$extension')");
$message="Video Uploaded Successfully!";
}
?>
<?php
echo "<script type='text/javascript'>alert('$message\\n\\nUpload: $name\\nSize: $size\\nType: $type\\nStored in: uploads/$name');</script>";
?>
<?php
}
?>
Edit:
Code-tags toegevoegd
Gewijzigd op 24/11/2017 14:26:26 door - Ariën -
En waar is het deel waarin je naar de database wegschrijft?
Rob Doemaarwat op 24/11/2017 09:57:29:
Je kunt ook gewoon een willekeurige string aanmaken, en die ook in de database opslaan (even een unique constraint d'r op, zodat je zeker wat dat ie uniek is, en dat het lekker snel zoekt).
Dat kan ook, maar volgens mij is de oplossing die ik gaf een hash die berekend is aan het ID. Dus hoef je niet een aparte hash op te slaan. Dat zou het een stuk eenvoudiger maken.
Of dat echt zo is weet ik niet, maar dat lijkt wel de intentie als je ID-nummers wilt maskeren.
Je hoeft dan alleen maar de encode-functie hoeven toe te passen op het ID, en je bent er.
Gewijzigd op 24/11/2017 14:24:46 door - Ariën -
http://carnage.github.io/2015/08/cryptanalysis-of-hashids (via hashids.org!). Het "maskeert" dus wel, maar het voorkomt niet dat mensen de volgende "hash" (of willekeurig welke andere hash) kunnen reconstrueren.
@Ariën: Dat klopt inderdaad. Het is inderdaad de afweging of je dit wilt, of juist niet.
Is het belangrijk dat de video's niet voor iedere willekeurige gebruiker toegankelijk zijn die een hash kan raden of berekenen?
In welk geval extra maatregelen mogelijk op zijn plaats zijn.
Security through obscurity (het voor dit doel gebruik maken van hashing) is nooit een goede oplossing. Het genereren van een unieke string is natuurlijk prima voor het uniek identificeren van een filmpje, maar niet echt voor het afschermen van ongewenste bezoekers. Denk ook bijvoorbeeld aan het oppikken van dit soort media door zoekmachines als verder op geen enkele manier de content zelf wordt afgeschermd.
Het codefragment van @Mitchell baart mij wel een beetje zorgen, het lijkt alsof je:
- het weergeven van het formulier,
- het verwerken van het formulier, en
- het afhandelen van foutmeldingen
allemaal op dezelfde plek regelt? De kans is dan groot dat code vrij snel één onoverzichtelijke brei wordt. Wanneer je complexere dingen gaat doen is het (of wordt het steeds) belangrijk(er) dat je je code overzichtelijk houdt. Een eerste stap daartoe zou het scheiden van de eerder genoemde acties zijn in verschillende compartimenten, in wat voor vorm dan ook (aparte PHP-bestanden of methoden van een klasse of wat dan ook).
Zorg dat je het overzicht houdt, dan kun je dingen ook beter in afzondering behandelen, zoals het toevoegen van logica in de afhandeling van een form-submit. Op dit moment moet je dit ergens tussenbreien in een monolitisch stuk code, wat mogelijk weer andere dingen omver trekt.
Gewijzigd op 24/11/2017 15:57:14 door Thomas van den Heuvel
- Een bestandsnaam ($name) kan aanhalingstekens (') bevatten, dan gaat je query de mist in (SQL-injectie).
- Dito voor $extension.
- De extensie kan ".php" zijn (extensie en MIME $type zijn twee heel aparte dingen; ik kan dus een .php bestand uploaden met een video/mpg MIME -> http://php.net/manual/en/curlfile.construct.php). Dat bestand komt dan in /upload/ te staan, en dan kan ik dus gewoon allerlei scripts uitvoeren op de server = volledige controle).
https://github.com/MitchBred/videouploader
Als er fouten in zitten wat ongetwijfeld zal zijn zou ik het graag willen horen.
Daarnaast raad ik je aan om eens iets over SQL-injectie te lezen, want bij het uploaden was het nog enigszins complex, maar in watch.php kun je gewoon helemaal los gaan met het $id (maar nogmaals: als je een PHP bestand kunt uploaden maakt het iet zo heel veel meer uit).
Misschien een tip: Lees het OWASP PHP cheatsheet-document over veiligheid eens door.
https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet
Gewijzigd op 25/11/2017 00:49:23 door - Ariën -