IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Lire un fichier vidéo ou ouvrir un fichier pdf en masquant la source - readfile


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut Lire un fichier vidéo ou ouvrir un fichier pdf en masquant la source - readfile
    Bonjour à toutes et à tous,

    Je souhaite donner l'accès sur mon site à certaines informations sous réserve que les personnes peuvent y avoir accès (après validation).

    Actuellement je ne sais donner que des liens directs.
    La problématique est donc que sis une personne avec accès communique le lien, tout le monde pourra y avoir accès sans passer par une validation de profil.

    On m'a orienté sur readfile dans une autre conversation.

    J'ai beaucoup de mal à comprendre comment utiliser readfile pour la lecture de ce qui est autre qu'un simple fichier texte.
    De plus, comment je peux "flouter" le lien vers mon fichier avec readfile pour une vidéo ou tout autre chose...
    Lire un texte et l'afficher c'est bien... pour le reste...

    La piste qui m'a été donné est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <source src="script.php?id_fichier=452" type="video/mp4">
    Cela étant quoi mettre dans ce script afin d'éviter qu'un utilisateur (validé ou non) sache ou se situe le fichier ?
    (Du coup, ce script va contenir un readfile ou plus du tout ?).

    Désolé pour le manque de code, j'aime bien venir avec ce que je fais quand je suis bloqué.
    Mais comme c'est la première fois que je m'attaque à cela... je n'ai clairement aucune idée de ce que je dois/ peux faire pour régler cela.

    D'avance merci pour votre aide.

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 921
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 921
    Par défaut
    Hello,

    Ton script.php va pouvoir contenir un morceau de code qui permet la vérification de l'utilisateur et son droit d'accès. Le cas contraire, une erreur pourra être levée et le fichier non disponible. Ensuite il faut que ton script.php retourne le contenu du fichier à télécharger avec les bonnes entêtes.

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Bonjour,

    Merci pour ton retour.

    Pour la vérification de l'utilisateur et de ses droits d'accès, cette partie la je peux la gérer en faisant matcher ses id/mdp avec la table relative aux utilisateurs.

    J'ai en revanche une vision très flou pour retourner le contenu du fichier tout en floutant la source de ce fichier.
    La seule chose qui me vient à l'esprit est :

    Utilisateur veut accéder au fichier => Vérifier dans la table X de la BDD s'il peut ou pas.
    S'il ne peut pas => END
    S'il peut alors je lui donne le lien => echo lien; // C'est cette partie là où je ne vois pas du tout comment procéder

    Comment donner une cible sans afficher cette même cible (dans le code de la page) ?

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 921
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 921
    Par défaut
    Tu peux t'appuyer sur ce code de la FAQ :
    https://php.developpez.com/faq/?page..._forcedownload

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Je te remercie pour ta réponse et ta nouvelle piste.

    Je l'ai parcouru et c'est trop compliqué pour moi.
    Je n'ai aucune idée de comment me servir de ce genre de code, et du coup comment je peux le modifier pour répondre à mon besoin.

    Existe t-il une marche moins haute sur laquelle je peux m'appuyer ?

    D'avance merci.

  6. #6
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 403
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Bonjour,

    Merci pour ton retour.

    Pour la vérification de l'utilisateur et de ses droits d'accès, cette partie la je peux la gérer en faisant matcher ses id/mdp avec la table relative aux utilisateurs.

    J'ai en revanche une vision très flou pour retourner le contenu du fichier tout en floutant la source de ce fichier.
    La seule chose qui me vient à l'esprit est :

    Utilisateur veut accéder au fichier => Vérifier dans la table X de la BDD s'il peut ou pas.
    S'il ne peut pas => END
    S'il peut alors je lui donne le lien => echo lien; // C'est cette partie là où je ne vois pas du tout comment procéder

    Comment donner une cible sans afficher cette même cible (dans le code de la page) ?
    Tout dépend des informations que tu veut mettre à disposition des utilisateurs authentifiés.

    Qui dit authentification dit la plupart du temps création d'une variable de session dont tu va tester l'existence dans tous les scripts protégés, donc seuls ceux qui sont authentifiés pourront accéder au contenu de ces pages.

    Maintenant si dans ces pages tu proposes des liens vers certains fichiers, par exemple des fichiers pdf, photos etc. et que tu veux protéger ces fichiers, l'idée est de les mettre dans un répertoire protégé par un ".htaccess" avec la seule mention "deny from all" de sorte que seul php pourra accéder à ces fichiers.

    Donc ensuite

    Si tu veux proposer ces fichiers protégés en téléchargement, tu utiliseras le script php que vient de te donner Bisûnûrs en le complétant par une vérification de l'existence de la variable de session utilisateur.

    ou

    S'il s'agit d'afficher par exemple une photo protégée (inclue dans le répertoire protégé par le ".htaccess) dans une page de l'espace sécurisé, tu devras la lire avec php puisque les liens directs internes via un <a href=...> ou <img src=...>, ou un lien externe via une URL, ne fonctionneront pas.

    Typiquement :

    Code html : 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
    <?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>
    toto
    <!-- la source de l'image est l'adresse d'un fichier php avec comme paramètre l'adresse de la photo dans le dossier protégé-->
    <img src="lecture_images.php?file=PHOTOS_PROTECT/ma-photo.jpg">
    titi
    </div>
    </body>
    </html>

    Code du fichier "lecture_images.php"
    Code php : 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
    <?php
    session_start();
    // Si la variable de 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;
     
    // Teste l'extension
    if(!empty($extension)) {
    	$image = true;
    	// On défini le header suivant l'extension en minuscule (pour ne pas avoir à tester les variantes en majuscules)
    	switch (strtolower($extension))
    	{
    		case 'jpg' :
    		case 'jpeg' : header("Content-Type: image/jpeg");
    						break;
    		case 'png' : header("Content-Type: image/png");
    		 				break;
     
    		default : $image = false;
    	}
    	if($image) {
    		readfile($file);
    	}
    }
    // Ce code permettra de lire des images de type jpg, jpeg et png pour les seuls utilisateurs authentifiés par la variable de session $_SESSION['user'] 
    ?>
    Conditions du test : Les deux fichiers ci-dessus ainsi que ton dossier PHOTOS_PROTECT (qui contient le .htaccess avec comme contenu la mention deny from all) sont au même niveau dans l'arborescence de ton répertoire.

    Voilà pourquoi on t'a orienté vers "readfile", car c'est php qui lira les fichiers via cette fonction, soit pour les faire afficher dans ta page comme ci-dessus, soit pour les proposer en téléchargement.

    EDIT: Et fais attention lors des tests, si une variable de session est définie, elle sera persistante tant que tu n'auras pas fermé ton navigateur.

  7. #7
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Bonjour,

    Merci pour ton retour (et vos retours d'une manière générale).

    Je regardais justement vidéos et pages internet pour progresser un peu la dessus.
    J'ai trouvé une vidéo qui semble expliquer aux débutants les choses.
    Je le regarderai demain avant de revenir sur ce post car je commence à fatiguer.

    Merci pour les explications point par point.
    Je sais que cela vous demande du temps et je m'en excuse.
    J'ai l'impression d'être un enfant qui ne sait pas lire à qui on file un livre en disant, tout est écrit la dedans
    Je sais mais.. je ne sais pas encore lire mais je veux apprendre à lire

    Je vais creuser le côté .htaccess sur ma solution d'hébergement pour sécuriser les fichiers que je veux protéger.

    Je creuse demain cette partie la, et teste cela. Je reviendrai après les tests,

    Merci à tous

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 403
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Bonjour,

    J'ai l'impression d'être un enfant qui ne sait pas lire à qui on file un livre en disant, tout est écrit la dedans
    Je sais mais.. je ne sais pas encore lire mais je veux apprendre à lire
    On comprend d'autant plus qu'apparemment tu apprends à lire sur des livres un peu compliqués pour toi pour l'instant. Les problèmes d'authentification, de protections des fichiers et de sécurité en général, cela ne s'aborde généralement que dans un second temps, niveau secondaire à minima. Si tu es en primaire, il te faudrait faire des exercices plus simples pour progresser plus facilement.

    Citation Envoyé par BOU59000 Voir le message
    Je vais creuser le côté .htaccess sur ma solution d'hébergement pour sécuriser les fichiers que je veux protéger.
    Par contre ça c'est assez facile. Dans un fichier vierge tu écris simplement deny fron all et tu sauvegardes ce fichier en l'enregistrant sous le nom ".htaccess". Mais attention le répertoire dans lequel sera enregistré ce fichier deviendra inaccessible via un lien (il suffira de supprimer ce fichier si tu veux rendre ce répertoire de nouveau accessible).

    Bon courage

  9. #9
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 921
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 921
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Dans un fichier vierge tu écris simplement deny fron all et tu sauvegardes ce fichier en l'enregistrant sous le nom ".htaccess".
    C'est même une étape dont on peut s'affranchir si on met nos fichiers dans un répertoire non accessible du "public", mais ça oblige tout un tas de pré-requis (index.php pas sur le root et donc configuration serveur pour que le point d'entrée de l'application soit dans un répertoire public).

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Bonjour,

    Merci à vous deux pour vos retours ,

    Voila mon premier exercice de fait :

    Index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <html>
     
    <h1> SITE TEST </h1>
     
    <a href="dl.php">Télécharger</a>
     
    </html>
    dl.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    $file = "test.zip";
     
    header('Content-Type: application/octet-stream'); //Forcer le téléchargement - N'importe quel type de fichier
     
    header('Content-Transfer-Encoding: Binary'); //Indique que ce n'est pas du texte ?
     
    header('Content-disposition: attachment; filename="'.$file.'"'); //Le nom du fichier s'il se trouve dans le même dossier, sinon j'utilie basename
     
    echo readfile($file);
     
    ?>
    Oui je sais, c'est impressionnant

    Mes découvertes :
    . MIME => permet d'indiquer au navigateur le format d'un fichier (oui je pars de la base histoire de comprendre ce que j'écris quand même )
    . Content-Type: application/octet-stream => Valeur par défaut pour un fichier binaire (si je ne dis pas de bêtise... Tout ce qui n'est pas un texte est considéré comme binaire)... Pour ma histoire de vidéo, ma prochaine étape sera de remplacer application/octet-stream par video/mp4 qui est un type particulier
    . Content-disposition: attachment; => C'est avec celui-ci que je force le téléchargement. Si je remplace attachement par inline, la lecture devrait se faire sur ma page en direct
    . Content-disposition: attachment; filename="'.$file. => Si le fichier se trouve dans le même dossier (comme vous l'avez mentionné dans le post). Si ce n'est pas le cas, j'utilise basename qui me permettra de récupérer le nom du fichier dans ma variable $file.

    @ ABCIWEB :
    Je règle un petit soucis avec mon hébergement et je me penche sur le ".htaccess".
    Je te dirai pour le côté simple, j'imagine que cela le sera une fois que je l'aurai fait au moins une fois

    @ Bisûnûrs :
    J'ai vu cela dans mes recherches.
    Que pour sécuriser l'accès on place les fichiers à protéger dans un fichier situé au dessus de la racine.
    En revanche, dans les exemples que j'ai vu, c'était toujours sur du local.
    Du coup, pour lever cette problématique, il suffisait de faire ce genre de chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // $file = "test.zip";
    $file = "../test.zip";
    Est-il possible de garder index.php sur le root et de placer par exemple une page.php que l'on va inclure dans index.php.
    Et que cette fameuse page.php soit situé dans un dossier au dessus de la racine ou alors que cette page.php soit dans root mais va lire des fichiers dans un dossier au dessus de root.
    Cette manière de procéder permet-elle d'éviter les configurations dont tu fais mention tout en garantissant une sécurité ?

    Question complémentaire :
    . est-il possible de combiner les deux ? dossier hors racine et en plus protégé par le ".htaccess"
    D'après ce que je peux en conclure cela n'apporterait par forcément de sécurité en plus ? (Car dans les deux cas on offre le même niveau de protection ?)

    Je réalise les tests avec la vidéo et poste mes avancées.

  11. #11
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Je viens de tester pour la vidéo...

    La vidéo est au format mp4 et fait 55 MO (Question : le fait de passer par readfile ce n'est pas gênant pour les vidéos dont la taille est importante ? )

    J'ai testé deux choses :
    . Une page index.php qui contient tout
    . Une page index.php et une page dl.php => La page index.php inclue la page dl.php

    Dans les deux cas :
    . Ma page devient complétement noire, le "reafile" prend l'ensemble de ma page : Est-ce à cause de l'erreur ?
    . Le code ne fonctionne pas (Vous allez me dire, si le code est faux d'un côté... et si on l'inclue de l'autre... il va pas se corriger comme par magie en passant de l'autre côté )

    Voici le code en question :
    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
     
    <html>
     
    <h1> SITE TEST </h1>
     
    <p> Ma vidéo :</p>
     
    <div class="container_video">
    	<?php
     
    	$file = "FR_Video_001.mp4";
     
    	header('Content-Type: video/mp4'); //Je demande ici une lecture en directe sur le site
     
    	header('Content-Transfer-Encoding: Binary'); //Indique que ce n'est pas du texte ?
     
    	header('Content-disposition: inline; filename="'.$file.'"'); //Le nom du fichier s'il se trouve dans le même dossier, sinon j'utilie basename
     
    	echo readfile($file);
     
    	?>
    </div>
     
    </html>
    La page me donne l'indication suivante :

    "Aucune vidéo dont le format ou le type MIME est géré n'a été trouvé".
    Soit ma vidéo qui est en mp4 ne l'est pas (on m'a menti !)
    Soit je dois rajouter une ligne dans ce que j'ai écris...

    PS : Si je change Content-Type: video/mp4 par quelque chose de plus générique Content-Type: video/mpeg, cela force un téléchargement, change l'extension de la vidéo qui passe de pm4 -> mpeg et ne résout pas le soucis de lecture

  12. #12
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 509
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 509
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Question complémentaire :
    . est-il possible de combiner les deux ? dossier hors racine et en plus protégé par le ".htaccess"
    D'après ce que je peux en conclure cela n'apporterait par forcément de sécurité en plus ? (Car dans les deux cas on offre le même niveau de protection ?)
    si le répertoire n'est pas accessible par le serveur, vous n'avez pas besoin d'ajouter un fichier htaccess.


    Citation Envoyé par BOU59000 Voir le message
    Voici le code en question :
    relisez ce que j'ai indiqué là :
    https://www.developpez.net/forums/d2.../#post12070766

  13. #13
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 403
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    . est-il possible de combiner les deux ? dossier hors racine et en plus protégé par le ".htaccess"
    D'après ce que je peux en conclure cela n'apporterait par forcément de sécurité en plus ? (Car dans les deux cas on offre le même niveau de protection ?)
    Comme dit mathieu à partir du moment où certains dossiers sont à l'extérieur de ton répertoire racine, seul php pourra y accéder donc inutile d'y ajouter un.htacces pour les protéger. Mais pour protéger uniquement certains dossiers, le plus simple et le moins contraignant selon moi est d'y mettre un fichier .htaccess avec la mention deny from all et de les laisser à l'intérieur de ton répertoire racine.

    Sinon pour lire des fichiers vidéos, même principe que pour l'exemple que je t'ai donné plus haut pour les photos avec deux fichiers:
    Code html : 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
    <?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>

    Fichier "lecture_video.php" :
    Code php : 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
    <?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();
    }
    ?>

    J'ai testé sur un serveur distant dédié avec un fichier vidéo FHD mp4 de 30 min et de 550 Mo. Cela fonctionne correctement et l'on peut naviguer à l'intérieur de la vidéo. Après si tu utilises ce script sur un serveur mutualisé, même si ça fonctionnera peut-être ponctuellement, tu risques fort de te faire jeter par ton hébergeur qui te dira que les mutu ne sont pas fait pour lire des vidéos (ça prend beaucoup de ressources) et il te proposera probablement d'upgrader ton hébergement vers un serveur dédié.

  14. #14
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    219
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Mai 2008
    Messages : 219
    Par défaut
    Bonjour,

    Merci pour vos retours.

    En fait je voulais essayer de faire cela comme un grand avec de que j'avais découvert et...
    comme tu le disais il est préférable de franchir les étapes les unes à la suite des autres

    Effectivement le code que tu as posté fonctionne à merveille et je te remercie beaucoup
    De mon côté, il y a encore des étapes à franchir pour arriver à faire cela par moi même.

    Je vais décortiquer ton code et apprendre à partir de ce dernier
    Je suis en hébergement multi actuellement.
    Je ne sais pas trop comment cela va passer du coup
    Je t'avoue que s'il me propose un VPS, je risque de me prendre une grosse claque car je n'ai aucune idée de comment faire avec un VPS.
    C'est chouette d'avoir son truc à soi mais... on le remplit comment pour qu'il fonctionne ?
    Après je ne cache pas que j'aimerai beaucoup apprendre à faire cela.

    Je vais clore le sujet afin de ne pas laisser un sujet résolu en suspens.

    Mais avant cela, je voudrais profiter d'un conseil.

    La problématique que j'ai exposé ici est au dessus de mon niveau de connaissance / compétence actuel.
    Si vous avez des pistes à suivre pour monter les marches les unes après les autres, je suis preneur
    (Même des pistes VPS, le fait que je ne vais pas creuser la piste de suite ne veut pas dire qu'elle ne sera pas creuser ! )

    D'avance merci.

    PS : Dans tous les cas je passera le sujet en clos maximum demain matin.
    Et à nouveau un grand merci à tous

  15. #15
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 403
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 403
    Par défaut
    Citation Envoyé par BOU59000 Voir le message
    Bonjour,

    Merci pour vos retours.

    En fait je voulais essayer de faire cela comme un grand avec de que j'avais découvert et...
    comme tu le disais il est préférable de franchir les étapes les unes à la suite des autres

    Effectivement le code que tu as posté fonctionne à merveille et je te remercie beaucoup
    De mon côté, il y a encore des étapes à franchir pour arriver à faire cela par moi même.

    Je vais décortiquer ton code et apprendre à partir de ce dernier
    Le code pour la lecture du fichier .mp4 n'est pas de moi, c'est pour cela que je t'ai mis le lien de référence sur github.

    Mais ce n'est pas dans ce genre de script php que tu vas apprendre les bases, car c'est un code très spécifique de gestion des flux que tu n'auras probablement jamais besoin de faire évoluer, et si tel est le cas mieux vaudra d'abord voir si l'auteur du code n'a pas fait de nouvelles versions pour gagner du temps. Cela ne t'empêche pas de regarder les grandes lignes mais il faut avoir le sens des priorités et la compréhension de ce code n'est pas indispensable dans le sens où il ne te serviras pas en dehors de ce contexte très précis.

    Ce qu'il est plus urgent d'apprendre pour l'instant ce sont les grandes lignes de l'éco système php pour pouvoir trouver des solutions sans nécessairement tout connaître à l'avance, un peu comme je viens de le faire pour répondre à ton problème en intégrant un code externe trouvé sur le web, parce que je ne l'avais jamais fait auparavant et que je présentais que la navigation dans un flux vidéo était moins simple que d'afficher des images ou un pdf.

    Citation Envoyé par BOU59000 Voir le message
    Je t'avoue que s'il me propose un VPS, je risque de me prendre une grosse claque car je n'ai aucune idée de comment faire avec un VPS.
    C'est chouette d'avoir son truc à soi mais... on le remplit comment pour qu'il fonctionne ?
    Après je ne cache pas que j'aimerai beaucoup apprendre à faire cela.
    C'est tout un métier l'infogérance, il te faudra du temps... Sinon la plupart des hébergeurs proposent des services payants, mais ce n'est pas bon marché. Faudrait aussi que tu aies une idée du nombre de visiteurs simultanés pour pouvoir prévoir ta config. La lecture d'un flux vidéo demande pas mal de bande passante internet, satisfaire quelques visiteurs simultanés, vs plusieurs centaines, vs plusieurs milliers va faire une grosse différence.

    Si tu reste sur un mutualisé je te conseille de te renseigner, voire d'en parler à ton hébergeur. Normalement ils te préviennent avant de te jeter mais peut-être pas tous, mieux vaut être prudent et savoir au minimum ce qui se passe si tu excèdes ton quota de ressources.

    Après tu pourrais peut-être envisager d'autres solutions, des vidéos hébergées sur le cloud et dont tu ne donnerais l'accès qu'à certains visiteurs...

Discussions similaires

  1. Comment ouvrir et lire des fichiers PDF avec Perl ?
    Par solerian dans le forum Langage
    Réponses: 3
    Dernier message: 04/11/2016, 14h12
  2. [PDF] Ouvrir et lire un fichier pdf qui se trouve sur ma machine
    Par essse dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 08/03/2009, 14h45
  3. [BDS 2006]Lire un fichier PDF
    Par pottiez dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/06/2007, 11h35
  4. [SOLARIS] Lire des fichiers PDF sous SOLARIS
    Par StyleXP dans le forum Solaris
    Réponses: 4
    Dernier message: 15/11/2006, 20h57
  5. [PDF] Lire un fichier PDF
    Par molesqualeux dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 24/05/2006, 19h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo