En php, get_include_path () et is_readable () sont deux fonctions très pratiques, qui sont particulièrement importantes lorsqu'ils traitent des jugements d'inclusion de fichiers et d'autorisation d'accès. Cet article expliquera comment utiliser ces deux fonctions en combinaison pour déterminer si un fichier existe dans le chemin spécifié par include_path et a des autorisations lisibles.
get_include_path () est une fonction intégrée qui renvoie le chemin d'inclusion actuel (y compris_path). Le chemin d'inclusion est un ensemble de répertoires utilisés par PHP lors de la recherche de fichiers inclus (tels que l'inclusion ou l'exigence ). Cette fonction peut être utilisée pour obtenir le chemin d'accès pour vérifier manuellement si le fichier existe dans un répertoire.
$includePath = get_include_path();
echo $includePath;
Sa valeur de retour est généralement une chaîne composée de plusieurs chemins, et les chemins sont connectés par des séparateurs de chemin liés au système d'exploitation (par exemple, Colon ":" sous Unix / Linux et Semicolon ";" sous Windows).
is_readable () est utilisé pour déterminer si un fichier existe et a des autorisations lisibles. Il renvoie une valeur booléenne, vrai signifie que le fichier existe et est lisible, et faux signifie que le fichier est inaccessible ou n'existe pas.
if (is_readable('/path/to/file.php')) {
echo "Le fichier lisible";
} else {
echo "Fichier non lisible";
}
Parfois, nous ne connaissons pas l'emplacement exact du fichier, nous savons seulement qu'il peut exister dans un répertoire spécifié par include_path . À ce stade, nous pouvons utiliser get_include_path () et is_readable () pour déterminer si le fichier existe et est lisible dans ces répertoires.
Voici un exemple de fonction pour vérifier si un nom de fichier est lisible dans l'actuel include_path :
function isFileReadableInIncludePath($filename) {
$paths = explode(PATH_SEPARATOR, get_include_path());
foreach ($paths as $path) {
$fullPath = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $filename;
if (is_readable($fullPath)) {
return $fullPath; // Renvoie le chemin complet du fichier lisible
}
}
return false; // Aucun fichier lisible n'est trouvé dans tous les chemins
}
Exemple d'utilisation:
$file = 'config.php';
$result = isFileReadableInIncludePath($file);
if ($result !== false) {
echo "Le fichier lisible,Le chemin est:$result";
include $result;
} else {
echo "Le fichier est dans include_path Non lisible ou n'existe pas";
}
Supposons que vous développez une grande application, et le fichier de configuration peut être situé dans l'un des multiples chemins, par exemple:
/ usr / local / lib / myapp /
/ home / user / myapp / inclut /
Répertoire de travail actuel
Vous pouvez ajouter ces chemins à PHP Inclut_Path :
set_include_path(
get_include_path() . PATH_SEPARATOR .
'/usr/local/lib/myapp/' . PATH_SEPARATOR .
'/home/user/myapp/includes/'
);
Utilisez ensuite les fonctions ci-dessus pour inclure en toute sécurité le fichier de configuration sans se soucier du fichier qui n'existe pas ou n'a aucune autorisation:
$configFile = isFileReadableInIncludePath('config.php');
if ($configFile) {
include $configFile;
} else {
die('Les fichiers de configuration ne sont pas accessibles');
}
is_readable () vérifie la lisibilité au niveau du système d'exploitation, qui est lié aux restrictions Open_Basedir de PHP. Assurez-vous de vous assurer que la configuration n'empêche pas PHP d'accéder aux répertoires connexes.
Lorsque vous utilisez le nom de fichier saisi par l'utilisateur, la vérification doit toujours être effectuée pour éviter les vulnérabilités de sécurité telles que la traversée du répertoire.
Si vous utilisez un mécanisme de chargement automatique (comme le compositeur) dans votre projet, cette méthode peut ne plus être nécessaire et doit être utilisée en fonction des besoins réels du projet.
En utilisant la combinaison de get_include_path () et is_readable () , il est possible de déterminer si le fichier existe dans le chemin inclus et est lisible sans clarifier le chemin complet du fichier. Ceci est particulièrement pratique dans les scénarios de conception modulaire ou de déploiement multiple. L'utilisation de ces fonctions peut raisonnablement aider à améliorer la robustesse et la maintenabilité du code.