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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
<?php echo "he je viens du répertoire racine";?>
Du coup ce n'est pas un problème de chemin.
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 : 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>
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
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();
}
?>
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.
. Deux choses se passent :
1 - Message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
Not Found
 
The requested URL was not found on this server.
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 :
.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