2010-02-25 8 views
2

Dans mon script, je définis le chemin d'inclusion (ainsi une autre partie de l'application peut inclure des fichiers), vérifie qu'un fichier existe et l'inclut.PHP: Peut inclure un fichier qui file_exists() dit n'existe pas

Toutefois, après avoir défini le chemin d'inclusion, file_exists() signale que le fichier n'existe pas, mais je peux toujours inclure le même fichier.

<?php 
    $include_path = realpath('path/to/some/directory'); 
    if(!is_string($include_path) || !is_dir($include_path)) 
    { 
    return false; 
    } 
    set_include_path(
    implode(PATH_SEPARATOR, array(
     $include_path, 
     get_include_path() 
    )) 
); 
    // Bootstrap file is located at: "path/to/some/directory/bootstrap.php". 
    $bootstrap = 'bootstrap.php'; 

    // Returns "bool(true)". 
    var_dump(file_exists($include_path . '/' . $bootstrap)); 
    // Returns "bool(false)". 
    var_dump(file_exists($bootstrap)); 

    // This led me to believe that the include path was not being set properly. 
    // But it is. The next thing is what puzzles me. 

    require_once $bootstrap; 
    // Not only are there no errors, but the file is included successfully! 

Je peux modifier le include_path et inclure des fichiers sans fournir le chemin absolu, mais je ne peux pas vérifier si elles existent ou non. Cela est vraiment ennuyeux car chaque fois qu'un fichier qui n'existe pas est appelé, mon application entraîne une erreur fatale, ou au mieux un avertissement (en utilisant include_once()).

Désactiver les erreurs et les avertissements n'est malheureusement pas une option.

Quelqu'un peut-il expliquer ce qui cause ce comportement?

Répondre

3

file_exists ne fait rien de plus que de dire si un fichier existe (et le script est autorisé à le savoir), résolvant le chemin relatif à la cwd. Il ne se soucie pas du chemin d'inclusion.

+0

Merci pour cela, je pensais que c'était le cas le plus probable, mais n'a pu trouver aucune mention dans le manuel PHP. Merci de clarifier :) – zanbaldwin

0

Oui Voici la façon de mettre en œuvre Simplest cette

$file_name = //Pass File name 
if (file_exists($file_name)) 
      { 
       echo "Exist"; 
      } 
     else 
      { 
       echo "Not Exist"; 
      } 
Questions connexes