Page 1 sur 2

cmt faire si fichier existe => ouvrir, sinon ouvrir un au

Posté : 07 juil. 2005, 21:24
par Nico128
Salut à tous ! Je suis super débutant en php...et jaimerais faire un truc :

C'est un script qui liste tous les fichiers qui sont dans le répértoire. Puis après la seconde partie, c'est que si un fichier txt portant le même nom qu'un des fichiers qui est dans le répértoire existe, ben ca le lis dans la page, et que si ce fichier txt n'existe pas, ca en ouvre un autre.

On ma déjà fait le début, pour listé les fichier :
<?php

$handle=opendir('.');
echo "Pointeur de dossier: $handle<BR>\n";
 echo "Fichiers:<BR>\n";
 while (false !== ($file = readdir($handle)))
 {
 if (is_dir($file)) { $type= "http://monsite.com/dir.gif" ; }
 else $type= "http://monsite.com/other.gif";
 $taille = filesize($file);
 $date = filemtime($file);
 echo "<br /><img src = $type><a href=\"$file\">$file</a> -
 $taille octets<br />";
 echo "$filename  modifier le : " . date ("d F Y H:i:s.", filemtime($file));
 echo "<br />";
 }
 closedir($handle);

 ?>
Ce qui me done ca http://www.legend-nintendo.com/aff_dossier3.php

Il reste a faire que si un fichier txt portant le meme nom qu1 de ces fichier existe, ben que ca le lise, et si ce fichier txt nexiste pas, ben ca en lit un autre.

Voilà merci d'avance

Posté : 07 juil. 2005, 21:40
par Darfox
Hum je pense qu'ici personne ne te fera jamais un script (enfin remarque j'en sais rien je peux me tromper) et si tu débutes en php et tu es mieu de le faire toi même.
Moi je suis près à t'aider (du moment que ça ne dépasse pas ma connaissance - qui n'est pas très élevé :d).

Il y a un truc que je n'ai pas compris, c'est que tu veux que le script vérifie si le fichier existe déja, mais comment tu choisis le nom du fichier que tu dois vérifier?

Posté : 07 juil. 2005, 22:07
par Nico128
D'après ce que jai compris a ce script qui est déja fait, c'est la variable $file qui done le nom du fichier.

Sinon moi ca me dérangerais pas du tout de le faire, mais ca fait bien 1 ans que je trafique souvent avec du php et ca entre toujours pas...

Enfin...c'est pas que ca...c'est aussi que je sais pas comment m'y prendre. J'ouvre bloc note et qu'est ce que je dois écrire ? C'est surtout ça mon problème...Et quand on m'envoie sur www.phpdebutant.org je comprend bien tous ces exercices, mais ya écrit nul part ce que jaimerais faire (pas forcément pour ce script là, mais aussi pour d'autres...). Et quand je demande sur leur forum on me dit d'utilisé une fonction, et je sais meme pas a quoi elle sert et comment elle s'utilise...alors voilà...d'ou viens mon problème ? J'aimerais bien apprendre le php mais que faut t'il écrire pour que ca marche ?

Posté : 11 juil. 2005, 01:27
par kmeleon
Cher Nico128,

Explique exactement, comme si tu parlais à un bébé, ce que tu veux faire. C'est pas très clair ce que tu demande, vérifier si un fichier texte existe déjà, ou je sais pas quoi, enfin bref j'ai rien compris. Explique un peu mieux ca doit pas être sorcier :wink:...

Posté : 12 juil. 2005, 13:12
par Invité
Salut. Alors enfaite j'ai quelques dizaines de centaines que j'aimerais metre en téléchargement. Mais tous faire en html c'est lont. Et passé par un script de Gestion de téléchargement aussi.

Alors ce que j'aimerais faire, c'est que ça liste tous les fichiers (c'est le script que jai mis + haut). Puis après dans la page a côté de chaque fichier qui est en téléchargement j'aimerais metre une description, alors si il existe un fichier txt qui porte le meme nom que le fichier, ca l'affiche dans la page, ou sinon ca affiche un autre fichier txt avec le contenu "pas de description".

Je sais pas si c'est possible de vérifier l'existance d'un fichier ?

Posté : 12 juil. 2005, 13:33
par kmeleon
<?php
$rep_d = "répertoire_des_descriptions/";
$handle=opendir('.');
echo "Pointeur de dossier: $handle<BR>\n";
echo "Fichiers:<BR>\n";
while (false !== ($file = readdir($handle)))
{
  if (is_file($file)) {
    $taille = filesize($file);
    $date = filemtime($file);
    echo "<br /><img src = ".$type."><a href=\"".$file."\">".$file."</a> -
    $taille octets<br />";
    echo "$filename  modifier le : " . date ("d F Y H:i:s.", filemtime($file));
    echo "<br />";
    if (file_exists($rep_d.$file.".txt"){ // Si le fichier correspondant existe dans le répertoire $rep
      $open = fopen($rep_d.$file.".txt","r");
      while (!feof($open)) { // Tant qu'on a pas atteind la fin du fichier
        echo "<br>".fgets($open, 4096);  // Affiche la descriptions contenue dans le fichier $rep_d.$file.".txt"
        fclose($open);
      }
    } else { // Si pas de description
      echo "<br>Aucune description";
    }      
}
      
}
closedir($handle);
?>
Bon c'est vite fait, donc c'est pas sur que ca marche.
Tu doit renseigner la variable $rep_d qui dit quel est le répertoire contenant les descriptions. Chaque fichier doit avoir son équivalent avec un .txt ajouté:
Exemple => fichier: "programme.exe", description "répertoire/programme.exe.txt"

Voilà ! Bonne journée

Posté : 15 juil. 2005, 17:29
par Nico128
Merci ! J'ai essayer, mais ya une ptite erreur :
Parse error: parse error, unexpected '{' in /home/www/517421f0ca8e8940110726410aa45186/web/test/fichiers-descriptions/fichier-desc.php on line 23
Ca doit pas etre grand chose...mais je suis tellement nul que j'arrive pas a la résoudre :cry:

Posté : 15 juil. 2005, 17:39
par NoNos
Il me semble qu'il faut que tu vire la dernière accolade elle est en trop. Si tu veux comprendre quelque chose en php il faut commencé par des truc simple (pas la gestion de fichier) visiter les sites comme phpdebutant et peut etre aller faire un tour chez un libraire acheter un bouquin (pour moi c le meilleur moyen de comprendre.

Posté : 15 juil. 2005, 17:40
par kmeleon
Désolé mais j'ai pas le temps de vérifier le code.
C'est pas dur tu regarde si chaque { a son }, et plus particulièrement à la ligne 23 :wink:

Bonne journée

Posté : 15 juil. 2005, 18:17
par Cyrano
Indentez donc proprement votre code et vous trouverez beaucoup plus rapidement l'erreur.
<?php
$rep_d = "répertoire_des_descriptions/";
$handle=opendir('.');
echo "Pointeur de dossier: $handle<BR>\n";
echo "Fichiers:<BR>\n";
while (false !== ($file = readdir($handle)))
{
    if (is_file($file))
    {
        $taille = filesize($file);
        $date = filemtime($file);
        echo "<br /><img src = ".$type."><a href=\"".$file."\">".$file."</a> - $taille octets<br />";
        echo "$filename  modifier le : " . date ("d F Y H:i:s.", filemtime($file));
        echo "<br />";
        if (file_exists($rep_d.$file.".txt") //<== Ce n'est pas l'accolade suivante qui est en trop, il manque une parenthèse
        {
            // Si le fichier correspondant existe dans le répertoire $rep
            $open = fopen($rep_d.$file.".txt","r");
            while (!feof($open))
            { // Tant qu'on a pas atteind la fin du fichier
            echo "<br>".fgets($open, 4096);  // Affiche la descriptions contenue dans le fichier $rep_d.$file.".txt"
            fclose($open);
            }
        }
        else
        { // Si pas de description
        echo "<br>Aucune description";
        }
    }
}
closedir($handle);
?>

Posté : 15 juil. 2005, 18:21
par rami
Personnellement, je préfère utiliser la fonction glob.
Ca fait gagner quelques lignes de code et permet de sélectionner plus rapidement les fichiers à sélectionner par un pattern.

Posté : 15 juil. 2005, 19:28
par Invité
Jai rajouté la parentèse qui manquais. Quand j'ajoute pas de fichier ca majoute bien "aucune description" mais dès que je mets un fichier txt ca m'affiche son contenu, + encore une liste d'erreur qui n'en fini pas :
Warning: feof(): 3 is not a valid stream resource in /home/www/517421f0ca8e8940110726410aa45186/web/test/fichiers-descriptions/fichier-desc.php on line 27

Warning: fgets(): 3 is not a valid stream resource in /home/www/517421f0ca8e8940110726410aa45186/web/test/fichiers-descriptions/fichier-desc.php on line 29


Warning: fclose(): 3 is not a valid stream resource in /home/www/517421f0ca8e8940110726410aa45186/web/test/fichiers-descriptions/fichier-desc.php on line 30
Merci beaucoup pour ce que vous faite ! C'est super sympa :D

Posté : 15 juil. 2005, 19:59
par kmeleon

Code : Tout sélectionner

<?php $rep_d = "répertoire_des_descriptions/"; $handle=opendir('.'); echo "Pointeur de dossier: $handle<BR>\n"; echo "Fichiers:<BR>\n"; while (false !== ($file = readdir($handle))) { if (is_file($file)) { $taille = filesize($file); $date = filemtime($file); echo "<br /><img src = ".$type."><a href=\"".$file."\">".$file."</a> - $taille octets<br />"; echo "$filename modifier le : " . date ("d F Y H:i:s.", filemtime($file)); echo "<br />"; if (file_exists($rep_d.$file.".txt")) { // Si le fichier correspondant existe dans le répertoire $rep $open = fopen($rep_d.$file.".txt","r"); while (!feof($open)) { // Tant qu'on a pas atteind la fin du fichier echo "<br>".fgets($open, 4096); // Affiche la description contenue dans le fichier $rep_d.$file.".txt" } fclose($open); // Il fallait déplacer le fclose() } else { // Si pas de description echo "<br>Aucune description"; } } } closedir($handle); ?>
Voilà il suffisait juste de déplacer le fclose() du fichier de description.

Bonne soirée :wink:

Posté : 15 juil. 2005, 20:39
par Invité
Merci ca marche du tonnère !!!!! :D :D :D :D

Merci infiniment !!

Posté : 15 juil. 2005, 22:06
par Nico128
J'aimerais vite faire encore quelque chose, c'est exactement la meme chose sauf qu'au lieu d'afficher avec un txt, jaimerais afficher une image.

Alors jai un peu repris et ca donne :
<?php
$rep_i = "répertoire_des_images/";
$rep_d = "répertoire_des_descriptions/";
$handle=opendir('.');
echo "Pointeur de dossier: $handle<BR>\n";
echo "Fichiers:<BR>\n";
while (false !== ($file = readdir($handle)))
{
    if (is_file($file))
    {
        $taille = filesize($file);
        $date = filemtime($file);
        echo "<br /><img src = ".$type."><a href=\"".$file."\">".$file."</a> - $taille octets<br />";
        echo "$filename  modifier le : " . date ("d F Y H:i:s.", filemtime($file));
        echo "<br />";
        if (file_exists($rep_d.$file.".txt"))
        {
            // Si le fichier correspondant existe dans le répertoire $rep
            $open = fopen($rep_d.$file.".txt","r");
            while (!feof($open))
            { // Tant qu'on a pas atteind la fin du fichier
            echo "<br>".fgets($open, 4096);  // Affiche la description contenue dans le fichier $rep_d.$file.".txt"
            }
fclose($open); // Il fallait déplacer le fclose()
        }
        else
        { // Si pas de description
        echo "<br>Aucune description";
        }
		
		if (file_exists($rep_i.$file.".gif"))
        {
            // Si l'image correspondant existe dans le répertoire $rep
            $open = fopen($rep_i.$file.".gif","r");
            while (!feof($open))
            { // Tant qu'on a pas atteind la fin du fichier
            echo "image existe";  // Affiche la qq'ch
            }
        }
        else
        { // Si pas de description
        echo "<br>image existe pas";
        }
		
    }
}
closedir($handle);
?>
Ca marche, sauf quand l'image .gif existe, ca mets à l'infinie "image existe", jaimerais juste mettre ça une fois.

Sinon vous aller me dire que ca ne va pas afficher l'image, mais je fait pas-à-pas.

merci df'avance