Quero criar um diretório se ele já não existir.
Está usando o is_dir
suficiente para esse fim?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
Ou devo combinar is_dir
com file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
além de||
/&&
.&&
é inútil aqui, porque, se o arquivo não existir (!file_exists($dir) == true
), com certeza não é um diretório. E se o arquivo existir,!is_dir($dir)
não será verificado, pois!file_exists($dir)
retornaráfalse
e o&&
operador está em curto-circuito .Respostas:
Ambos retornariam verdadeiros nos sistemas Unix - no Unix tudo é um arquivo, incluindo diretórios. Mas, para testar se esse nome foi escolhido, verifique os dois. Pode haver um arquivo comum chamado 'foo', o que impediria a criação de um nome de diretório 'foo'.
fonte
is_writable
, não é?fonte
# 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 que você não passou '$ filename'?Eu acho que realpath () pode ser a melhor maneira de validar se existe um caminho http://www.php.net/realpath
Aqui está um exemplo de função:
Versão curta da mesma função
Exemplos de saída
Uso
fonte
A segunda variante na postagem da pergunta não está ok, porque, se você já possui um arquivo com o mesmo nome, mas não é um diretório,
!file_exists($dir)
retornaráfalse
, a pasta não será criada e, portanto,"failed to open stream: No such file or directory"
ocorrerá um erro . No Windows, há uma diferença entre os tipos 'arquivo' e 'pasta'; portanto, é necessário usarfile_exists()
eis_dir()
ao mesmo tempo, por exemplo:fonte
fonte
fonte
adicionar true após 0777
fonte
Bem, em vez de verificar os dois, você poderia fazer
if(stream_resolve_include_path($folder)!==false)
. É mais lento, mas mata dois coelhos de uma só vez.Outra opção é simplesmente ignorar o
E_WARNING
, não usando@mkdir(...);
(porque isso simplesmente dispensaria todos os avisos possíveis, não apenas o diretório já existe), mas registrando um manipulador de erro específico antes de fazê-lo:fonte
Eu tinha a mesma dúvida, mas veja a documentação do PHP:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Você verá que is-dir possui as duas propriedades.
fonte
Esta é uma pergunta antiga, mas ainda atual. Apenas teste com a função
is_dir()
oufile_exists()
a presença do arquivo.
ou..
no diretório em teste. Cada diretório deve conter estes arquivos:fonte
É assim que eu faço
fonte
Uma maneira de verificar se um caminho é diretório pode ser a seguir:
fonte