51 votes

Vérifier s'il existe une inclusion (ou une exigence)

Comment vérifier si un include / require_once existe avant de l'appeler, j'ai essayé de le mettre dans un bloc d'erreur, mais PHP n'a pas aimé cela.

Je pense que file_exists() fonctionnerait avec un certain effort, mais cela nécessiterait le chemin complet du fichier, et un include relatif ne pourrait pas être passé facilement.

Y a-t-il d'autres moyens?

60voto

Johannes Gorset Points 4378

Je crois que file_exists fonctionne avec des chemins relatifs, bien que vous puissiez aussi essayer quelque chose dans ce sens ...

if(!@include("script.php")) throw new Exception("Failed to include 'script.php'");

... inutile de préciser que vous pouvez remplacer l'exception par la méthode de traitement des erreurs de votre choix. L'idée ici est que la déclaration if vérifie si le fichier peut être inclus, et tout message d'erreur normalement émis par include est supprimé en le préfixant par @ .

10voto

Khawar Points 87

Vous pouvez également rechercher les variables, fonctions ou classes définies dans le fichier d'inclusion et voir si l'inclusion fonctionne.

 if (isset($variable)) { /*code*/ }
 

OU

 if (function_exists('function_name')) { /*code*/ }
 

OU

 if (class_exists('class_name')) { /*code*/ }
 

9voto

Stephane JAIS Points 782

Découvrez la fonction stream_resolve_include_path, elle effectue une recherche avec les mêmes règles que include ().

http://php.net/manual/en/function.stream-resolve-include-path.php

6voto

Yacoby Points 29771

file_exists fonctionnerait avec la vérification si le fichier requis existe quand il est relatif au répertoire de travail actuel car il fonctionne correctement avec des chemins relatifs. Toutefois, si le fichier d'inclusion se trouvait ailleurs sur PATH, vous devrez vérifier plusieurs chemins.

 function include_exists ($fileName){
    if (realpath($fileName) == $fileName) {
        return is_file($fileName);
    }
    if ( is_file($fileName) ){
        return true;
    }

    $paths = explode(PS, get_include_path());
    foreach ($paths as $path) {
        $rp = substr($path, -1) == DS ? $path.$fileName : $path.DS.$fileName;
        if ( is_file($rp) ) {
            return true;
        }
    }
    return false;
}
 

5voto

Alix Axel Points 63455

file_exists() fonctionne avec des chemins relatifs, il va également vérifier si des répertoires existent. Utilisez is_file() place:

 if (is_file('./path/to/your/file.php'))
{
    require_once('./path/to/your/file.php');
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X