Bonjour à toutes et à tous,
Le code que je vais montrer fait suite à ce post la :
https://www.developpez.net/forums/d2.../#post12070841
Le code fonctionne bien dans des répertoires classiques non protégés.
Afin de limiter l'accès à ces vidéos, j'ai fait un test en plaçant une video à la racine dans un dossier.
A ce moment, le code n'est plus capable de lire la vidéo.
J'ai réalisé des tests avec des fichiers php basique : fichier contenant du texte, placé dans root, et que je viens inclure, cela fonctionne
Du coup ce n'est pas un problème de chemin.
Code : Sélectionner tout - Visualiser dans une fenêtre à part <?php echo "he je viens du répertoire racine";?>
Je penche plus sur le fait que le code est parcouru, mais comme on est dans un dossier protégé par nature, il n'arrive pas à lire la vidéo.
Des idées sur comment faire ?
CODE DE LA PAGE OU LA VIDEO SERA AFFICHEE
CODE DE LA PAGE QUI LIRA LA VIDEO :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <?php session_start(); /* Ici pour l'exemple je défini la variable de session Normalement on ne devrait vérifier que son existence puisqu'elle est définie dans le formulaire d'authentification */ $_SESSION['user'] = 1; ?> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Document sans nom</title> </head> <body> <div> Test lecture du fichier "ma-video.mp4" situé dans le dossier VIDEO </div> <video controls width="320"> <source src="lecture_video.php?file=VIDEO/ma-video.mp4" type="video/mp4" /> </video> </body> </html>
EDIT : Je viens de faire un test en forçant le téléchargement de la vidéo qui se situe dan un répertoire racine.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78 <?php session_start(); // Si la session n'est pas définie on sort if(!isset($_SESSION['user'])) exit(); // Récupère la variable get file (chemin vers l'image) $file = isset($_GET['file'])? $_GET['file'] : null; // Récupère l'extension $extension = isset($file) ? pathinfo($file,PATHINFO_EXTENSION) : null; if(is_file($file) && $extension == 'mp4') { /* https://gist.github.com/kicktv/4239c499101494538d384ce7995bb1af // php stream video to browser // this script supports Video of forward and backward movement // It does not support remote link For video */ $file = $file; $fp = @fopen($file, 'rb'); $size = filesize($file); // File size $length = $size; // Content length $start = 0; // Start byte $end = $size - 1; // End byte header('Content-type: video/mp4'); //header("Accept-Ranges: 0-$length"); header("Accept-Ranges: bytes"); if (isset($_SERVER['HTTP_RANGE'])) { $c_start = $start; $c_end = $end; list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); if (strpos($range, ',') !== false) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); header("Content-Range: bytes $start-$end/$size"); exit; } if ($range == '-') { $c_start = $size - substr($range, 1); } else { $range = explode('-', $range); $c_start = $range[0]; $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] : $size; } $c_end = ($c_end > $end) ? $end : $c_end; if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); header("Content-Range: bytes $start-$end/$size"); exit; } $start = $c_start; $end = $c_end; $length = $end - $start + 1; fseek($fp, $start); header('HTTP/1.1 206 Partial Content'); } header("Content-Range: bytes $start-$end/$size"); header("Content-Length: " . $length); $buffer = 1024 * 8; while (!feof($fp) && ($p = ftell($fp)) <= $end) { if ($p + $buffer > $end) { $buffer = $end - $p + 1; } set_time_limit(0); echo fread($fp, $buffer); flush(); } fclose($fp); exit(); } ?>
. Deux choses se passent :
1 - Message suivant :
2 - Quand je regarde l'URL, on dirait qu'une redirection est réalisée par ma solution d'herbergement puisque je donne une URL de téléchargement de type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Not Found The requested URL was not found on this server.
.root
.. www
.. dossier_ou_se_situe_video <- Mon lien pointe dans ce répertoire
Et quand je regarde l'URL en erreur, le chemin indiqué est le suivant
.rootge
.. www <- je regarde à ce niveau s'il y a un dossier video (www/dossier_ou_se_situe_video)
.. dossier_ou_se_situe_video
A mon avis c'est pour cela que la lecture de la video plante, si une redirection est faite en automatique par ma solution d'hébergement pour les scripts qui lisent/ télécharge des fichiers... alors la direction de lecture n'est plus la bonne...
Solution : Placer les videos dans un sous dossier de www mais protéger ce dossier avec .htaccess ?
Problème : je ne sais pas encore comment utiliser ceci et si je le fais, puisque le dossier sera protégé, j'aurai le même problème pour le lire non ?
D'avance merci pour vos retours à ce sujet![]()
Partager