Quiero crear un directorio si aún no existe.
¿Está usando lo is_dir
suficiente para ese propósito?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
¿O debería combinar is_dir
con file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
además de||
/&&
.&&
es útil aquí, porque, si el archivo no existe (!file_exists($dir) == true
), seguro que no es un directorio. Y si el archivo existe,!is_dir($dir)
no se verificará, porque!file_exists($dir)
volveráfalse
y el&&
operador está en cortocircuito .Respuestas:
Ambos serían verdaderos en los sistemas Unix: en Unix todo es un archivo, incluidos los directorios. Pero para probar si se toma ese nombre, debe verificar ambos. Puede haber un archivo normal llamado 'foo', que evitaría que cree un nombre de directorio 'foo'.
fuente
is_writable
?fuente
# The following directives force the content-type application/octet-stream # and force browsers to display a download dialog for non-image files. # This prevents the execution of script files in the context of the website: #ForceType application/octet-stream Header set Content-Disposition attachment <FilesMatch "(?i)\.(gif|jpe?g|png)$"> ForceType none Header unset Content-Disposition </FilesMatch> # The following directive prevents browsers from MIME-sniffing the content-type. # This is an important complement to the ForceType directive above: Header set X-Content-Type-Options nosniff
mkdir
, ¿por qué no pasaste '$ filename'?Creo que realpath () puede ser la mejor manera de validar si existe una ruta http://www.php.net/realpath
Aquí hay una función de ejemplo:
Versión corta de la misma función.
Ejemplos de salida
Uso
fuente
La segunda variante en la publicación de preguntas no está bien, porque, si ya tiene un archivo con el mismo nombre, pero no es un directorio,
!file_exists($dir)
volveráfalse
, no se creará la carpeta, por lo que se"failed to open stream: No such file or directory"
producirá un error . En Windows hay una diferencia entre los tipos de 'archivo' y 'carpeta', por lo que debe usarfile_exists()
y,is_dir()
al mismo tiempo, por ejemplo:fuente
fuente
fuente
agregar verdadero después de 0777
fuente
Bueno, en lugar de verificar ambos, podrías hacerlo
if(stream_resolve_include_path($folder)!==false)
. Es más lento pero mata a dos pájaros de un tiro.Otra opción es simplemente ignorar
E_WARNING
, no mediante el uso@mkdir(...);
(porque eso simplemente anularía todas las advertencias posibles, no solo el directorio ya existe), sino registrando un controlador de errores específico antes de hacerlo:fuente
Tenía la misma duda, pero mira el docu PHP:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Verá que is-dir tiene ambas propiedades.
fuente
Esta es una pregunta vieja, pero aún tópica. Simplemente pruebe con la función
is_dir()
ofile_exists()
la presencia del archivo.
o..
en el directorio bajo prueba. Cada directorio debe contener estos archivos:fuente
Así es como lo hago
fuente
Una forma de verificar si una ruta es directorio puede ser la siguiente:
fuente