php - texto - Compruebe si existe una inclusión(o requiere)
string strip_tags (6)
Consulte la función stream_resolve_include_path, busca con las mismas reglas que include ().
http://php.net/manual/en/function.stream-resolve-include-path.php
¿Cómo se comprueba si existe un include / require_once antes de llamarlo, traté de ponerlo en un bloque de error, pero a PHP no le gustaba eso.
Creo que file_exists()
funcionaría con cierto esfuerzo, sin embargo, eso requeriría toda la ruta del archivo, y una relativa no se podría pasar fácilmente.
¿Hay otras maneras?
Creo que file_exists
funciona con rutas relativas, aunque también puedes probar algo en esta línea ...
if(!@include("script.php")) throw new Exception("Failed to include ''script.php''");
... no hace falta decir que puede sustituir la excepción por cualquier método de manejo de errores que elija. La idea aquí es que la declaración if
verifica si el archivo puede ser incluido, y cualquier mensaje de error normalmente emitido por include
se suprime prefijando con @
.
Creo que la forma correcta es hacer:
if(file_exists(stream_resolve_include_path($filepath))){
include $filepath;
}
Esto se debe a que http://php.net/manual/en/function.stream-resolve-include-path.php dice que stream_resolve_include_path
resuelve el "nombre de archivo contra la ruta de inclusión de acuerdo con las mismas reglas que fopen () / include".
Algunas personas sugirieron usar is_file
o is_readable
pero eso no es para el caso de uso general porque en el uso general, si el archivo está bloqueado o no está disponible por alguna razón después de que file_exists devuelva TRUE, eso es algo que debes notar con un mensaje muy feo mensaje de error directamente en la cara del usuario final o si no está abierto a un comportamiento inesperado e inexplicable más adelante con la posible pérdida de datos y cosas por el estilo.
También puede verificar las variables, funciones o clases definidas en el archivo de inclusión y ver si la inclusión funcionó.
if (isset($variable)) { /*code*/ }
O
if (function_exists(''function_name'')) { /*code*/ }
O
if (class_exists(''class_name'')) { /*code*/ }
file_exists()
funciona con rutas relativas, también comprobará si existen directorios. Use is_file()
lugar:
if (is_file(''./path/to/your/file.php''))
{
require_once(''./path/to/your/file.php'');
}
file_exists
funcionaría para verificar si el archivo requerido existe cuando es relativo al directorio de trabajo actual, ya que funciona bien con rutas relativas. Sin embargo, si el archivo de inclusión estuviera en otro lugar en PATH, tendría que verificar varias rutas.
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;
}