Probleme file_exists()

Résolu
Bonjour,
J'ai un souci avec file_exists() que j'utilise pour une série de tests...
J'ai mon code
<?php

$album = $_GET['idcode'];
$url = "/$album/$album.html";
echo "<iframe name='album' height='100%' width='100%' src='$url'></iframe> ";

?>
Je récupère la valeur idcode via un formulaire avec la méthode $_GET
J'ai une série de dossiers contenant mes pages html appelées via "idcode": E1/E1.html,E2/E2.html...et lorsque que je test ce code en rentrant les valeur E1,E2... no probleme.
Par contre, lorsque je met
<?php

$album = $_GET['idcode'];
$url = "/$album/$album.html";
if (file_exists($url)){
echo "<iframe name='album' height='100%' width='100%' src='$url'></iframe> ";
}
else{ header("Location: index.php");}
?>

Quelque soit la valeur rentrée dans mon formulaire, il me renvoie sur index.php, meme avec les valeur E1 ou E2 (sachant que les fichiers E1/E1.html ...etc existent)

Quelqu'un pourrait me dire ou se situe mon erreur de code?

Merci d'avance

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. Bonjour

    Une url et un nom de fichier, ce n'est pas la même chose, c'est là ton problème.

    Dans src='$url', il s'agit bien d'url, le navigateur qui l'interprète va lui même ajouter le "http://tonsite" avant pour aller chercher la bonne page.

    Par contre, dans file_exists($url), il s'agit d'un nom de fichier (dans le serveur). Et comme il commence par /, php va essayer de le chercher dans le dossier indiqué à partir de la racine du serveur. Or le chemin que tu indiques est relatif à la racine de ton site, pas à la racine du serveur. Il faut donc ajouter $_SERVER['DOCUMENT_ROOT'] avant :

    if (file_exists($_SERVER['DOCUMENT_ROOT'].$url)){ ...
    1. ok merci pour ce petit cours express file_exists et ces différentes interprétations.
      Le problème est résolu et je comprends le pourquoi... yipee.
      Merci le père!
      1. Salut,
        J'ai de nouveau un tit souci sur la programmation de ce site.
        Je veux créer un menu déroulant de liens créé via php avec file_exists() qui m'ajouterais les options si le document html associé est trouvé.(format du lien: E1/E1.html ; E2/E2.html... sachant qu'il n' y a jamais de trou dans la numérotation des dossiers ( impossible que E8 existe sans E7 par exemple)
        Dans le header:
        <script type="text/JavaScript">
        function MM_jumpMenu(targ,selObj,restore){
        eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
        if (restore) selObj.selectedIndex=0;
        }
        </script>

        Dans body:
        <select class="form1" onchange="MM_jumpMenu('parent',this,0)">
        <option value="">code</option>
        <?php
        for ($i=1;;++$i)
        {
        $d = "E$i";
        $doss= "$d/$d.html";

        if (file_exists($_SERVER['DOCUMENT_ROOT'].$doss)){
        echo "<option value='album.php?idcode=$d'>$d</option>";}else{
        break;}
        }//for
        ?>
        </select>

        Quelqu'un peut m'expliquer pourquoi rien ne se crée sachant que j'ai E1,E2 et E3 qui existent?! (j'ai un menu déroulant comportant uniquement "code"...)

        Merci
        1. Ce sujet est résolu, tu aurais dû poser une nouvelle question. M'enfin...
          Tu as oublié un / qulque part, il n'y en a pas à la fin de $_SERVER['DOCUMENT_ROOT']
          $doss= "/$d/$d.html"; 
          1. lol merci. J'avais abandonné cette idée mais du coup je m'y remets. je sais que c'est résolu mais bon vu qu'il y avait toujours un p'tit file_exists(), je me suis dit "mais pourquoi donc créer un autre post?"... enfin je suis d'accord avec toi je recommencerais plus