Tengo una pregunta si se me permite. Tengo una variable llamada $source
y esto debería contener una ruta relativa a un archivo, por ejemplo ./uploads/2012/some-document.pdf
Comprobación de una cadena para ver si el archivo existe localmente
Ahora, esta variable $source
contendrá la entrada del usuario, a través de $ _GET y $ _POST. No deseo que las personas ingresen URL y solo quiero hacer algo si el archivo existe solo en el servidor local.
Mi pregunta es ¿cuál es la mejor manera de verificar si un archivo existe solo en el servidor local?
Esto es lo que tengo hasta ahora:
1) file_exists
puede devolver verdadero en función de la configuración del servidor, por lo que podría utilizar este lado stripos para comprobar si los primeros charatcers de la cadena es http: // así:
if(file_exists($source) && stripos($source,'http://')!==0) {
echo 'File exists on local';
}
Sin embargo, el inconveniente sería que tendría que especificar todos los diferentes tipos de URL como https: //, http: // ftp: // sólo para cuidate.
2) Yo uso realpath
para obtener la ruta absoluta del archivo, y esto devuelve falso si no se puede encontrar. Esto parece ser bastante sólido, pero no es 100% esta es la mejor aplicación para él
3) Use preg_replace
para eliminar todas las menciones de URL en la cadena primero, y luego simplemente use file_exists
. Si bien esto probablemente sería el más seguro, probablemente sería el más intenso y preferiría no utilizar este método.
Esa es una excelente sugerencia para usar parse_url, creo que file_exists sería bueno. Gracias –
Puede haber problemas en Windows usando file_exists() y is_file() en combinación con archivos remotos. Parece que Windows está descargando o algo así. Mejor use parse_url() y verifique si hay un host vacío. – redaxmedia