Partage
  • Partager sur Facebook
  • Partager sur Twitter

filesize n'affiche pas la taille

Sujet résolu
    19 novembre 2019 à 13:20:40

    Bonjour,

    La réponse à mon pb existe certainement qque part mais malgré des recherches avec différents mots-clés je ne trouve pas de réponse.

    J'ai bien qques notions de PHP mais je suis loin de le maîtriser ... lol

    Mon pb :

    Sur un hébergement OVH, j'ai mis des vidéos dans un répertoire, (entre 100 et 500 Mo chacune, avec des screens) effectuées lors de voyages, que je souhaite présenter en tableau afin de les partager avec amis et famille.

    Si je fais :

    <?php
    	$fichiervideo = 'adresse du répertoire/nom du fichier vidéo';
    	$size = filesize ($fichiervideo);
    	echo 'TAILE DU FICHIER "'.$fichiervideo.'" : '.$size.'';
    ?>

    j'obtiens bien la taille (en o) ...mais il faudrait que je le fasse pour chacun des fichiers, donc je fais une boucle.

    Mais si je fais une boucle : (les noms des vidéos et des screens sont sous la forme "Ymd-nom du fichier" et j'ai enlevé ce qui concerne la présentation)

    <?php
    $dp = opendir('adresse du répertoire');
    $i=0;
    while ($file = readdir($dp)) {
    	if( $file != '.' && $file != '..' && preg_match('#\.(mov|avi|mp4)$#i', $file)) {
    	$fichiervid[$i]=$file;
    	$i++;
    	}
    }
    closedir($dp);
    if(count($fichiervid)==0) {
    echo 'Aucun document mis en ligne ...';
    }
    else {
    echo '<table>
    	<tr>
    		<td>Date</td>
    		<td>Aperçu</td>
    		<tdFichiers vidéos</td>
    		<td>Taille</td>
    	</tr>';
    if(count($fichiervid)!=0) {rsort($fichiervid);}
    $i=0;
    while ($i < count($fichiervid)) {
    $fichierimg[$i] = eregi_replace (".avi",".jpg",$fichiervid[$i]);
    $nomvideo[$i] = eregi_replace (".avi","",$fichiervid[$i]);
    $fich = explode ("-", $nomvideo[$i]);
    $dateang = $fich[0];
    $datean = substr ($dateang, 0, 4);
    $datemois = substr ($dateang, 4, 2);
    $datejour = substr ($dateang, -2);
    $nom = $fich[1];
    $size = filesize ($fichiervid[$i]);
    echo '<tr>
    		<td>'.$datejour.'/'.$datemois.'/'.$datean.'</td>
    		<td><img src="adresse du répertoire'.$fichierimg[$i].'" /></td>
    		<td><a href="adresse du répertoire'.$fichiervid[$i].'" target="_blank">'.$nom.'</a></td>
    		<td>'.$size.'</td>
    	</tr>';
    	$i++;
    }
    ?>
    </table>
    <?php
    }
    ?>

    j'ai bien l'affichage de la date (au format d/m/Y), du screen de la vidéo, du nom du fichier vidéo (avec le lien pour le dl) ... mais la colonne "Taille" reste désespérément vide.

    A côté de quoi suis-je passé ou que n'ai-je pas compris dans le fonctionnement de la balise 'filesize' ?

    Si qqu'un pouvait me donner un conseil, une idée ...

    Merci


    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2019 à 13:26:52

      Il te faut le nom "complet" du fichier, pas uniquement son basename : filesize('adresse du répertoire/' . $fichiervid[$i]) mais je ferais ça plutôt lors du readdir de façon à directement avoir le chemin du fichier pour la suite ($fichiervid[$i]='adresse du répertoire/' . $file; mais le problème c'est que ça t'obligerait à modifier ton code - même si ce n'est pas la mort, a priori, juste ajouter un basename).

      On pourrait faire plein de commentaires sur ce code :

      • il est mal indenté
      • eregi_replace qui n'existe plus
      • le while qui pourrait être remplacé par un foreach
      • opendir/readdir/closedir + preg_match qui pourrait être remplacé par un glob
      • ...

      -
      Edité par julp 19 novembre 2019 à 13:40:25

      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2019 à 15:44:09

        @ julp ..

        J'ai essayé en mettant le chemin relatif, absolu, même le chemin du home ... je n'ai tjrs pas la taille dans ma boucle.

        Je sais que mon code n'est pas au top, mes références PHP datent d'il y a 20 ans ... :euh:

        Même si j'ai réussi à digérer un minimum le CSS, le responsive design, pour les màj de PHP c'est plus dur ... et à mon âge les neurones ne fonctionnent plus aussi bien ... :D

        Mais je suis prêt à accepter tous les coups de main pour permettre à ce bout de code de fonctionner sans faire 50 commandes.

        Merci

        • Partager sur Facebook
        • Partager sur Twitter
          19 novembre 2019 à 16:14:39

          Tu as modifié quoi et comment ? Aucune raison que le filesize ne fonctionne pas avec ce que j'ai indiqué.

          Les eregi_replace tu sauras obligé de les modifier tôt ou tard, ces fonctions n'existent plus depuis PHP 7.0.0.

          • Partager sur Facebook
          • Partager sur Twitter
            19 novembre 2019 à 16:31:39

            Sachant que les fichiers se trouvent dans le dossier "VIDEOS" qui est dans un dossier "VOYAGES" qui se trouve à la racine j'ai essayé avec :

            VOYAGES/VIDEOS/

            /VOYAGES/VIDEOS/

            /home/xxxxxxxxx/www/VOYAGES/VIDEOS/

            Je m'arrache les derniers cheveux qui me restent sur le crâne ...

            • Partager sur Facebook
            • Partager sur Twitter
              19 novembre 2019 à 16:41:47

              Ok mais ça ne répond pas à ma question : comment as-tu modifié ton code ? Me donner le chemin ne me dit pas comment il est utilisé ou si le filesize est bien utilisé ou non.

              J'aurais eu à écrire le même code, j'aurais fait quelque chose comme ça

              Le deuxième chemin ne fonctionnera pas, il est faux. Après, il faudra aussi éventuellement différencier chemins HTTP et sur le système : le dernier ne passera pas en lien (a href) et potentiellement le premier aussi (mais c'est un détail qui pourra être réglé ensuite)

              -
              Edité par julp 19 novembre 2019 à 17:21:28

              • Partager sur Facebook
              • Partager sur Twitter
                19 novembre 2019 à 17:57:48

                J'ai du bugger à un endroit en changeant l'adresse du filesize

                Ca fonctionne effectivement en mettant :

                $size = filesize ('/home/xxxxxxxx/www/VOYAGES/VIDEOS/'.$fichiervid[$i]);

                Problème résolu.

                Merci beaucoup ... et encore plus pour le script donné ... qui est vraiment plus "moderne" que le mien ;)

                PS : Super site et forum qui me dépanne souvent ... même si ce n'est que ma 1ère réelle demande d'aide

                Je passe en "Résolu"

                -
                Edité par patlerebelle 19 novembre 2019 à 17:58:51

                • Partager sur Facebook
                • Partager sur Twitter
                  19 novembre 2019 à 18:05:07

                  Ce n'est pas optimal comme solution :

                  • le script gagnerait en (potentielle) évolutivité si ton tableau de fichiers était constitué des chemins de ceux-ci, pas uniquement leur basename (mais je radote, je l'ai déjà dit)
                  • ton chemin est hardcodé, l'idéal, à mon sens, serait de créer ce chemin absolu en se basant sur le répertoire où est situé le script via la constante magique __DIR__ (filesize(__DIR__ . '/VOYAGES/VIDEOS/' . $fichiervid[$i]); et pour éviter de copier plusieurs fois ce chemin, le définir par une constante)

                  En utilisant autre chose que opendir/readdir/closedir (glob, les itérateurs de la SPL comme code, scandir, etc), tu récupères justement le chemin du répertoire, pas seulement le nom du fichier, ce qui permet ensuite de travailler directement sur le chemin du fichier et de ne pas avoir à repréciser ce dernier quand tu fais un filesize ou toute autre fonction liée aux fichiers).

                  EDIT : j'ai oublié de dire que j'étais moi-même parti sur la fonction glob au départ, pensant qu'elle avait une option pour ignorer la casse [des extensions], comme le fait ton code de départ or ce n'est pas le cas donc je me suis rabattu sur la SPL (FilesystemIterator + RegexIterator + iterator_to_array) à la place, tout ça pour simplement réimplémenter glob de façon case insensitive :/

                  -
                  Edité par julp 19 novembre 2019 à 18:09:45

                  • Partager sur Facebook
                  • Partager sur Twitter

                  filesize n'affiche pas la taille

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown