Je veux créer un répertoire s'il n'existe pas déjà.
Utilise-t-il is_dir
suffisamment à cette fin?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
Ou dois-je combiner is_dir
avec file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
outre||
/&&
.&&
est inutile ici, car, si le fichier n'existe pas (!file_exists($dir) == true
), ce n'est certainement pas un répertoire. Et si le fichier existe,!is_dir($dir)
ne sera pas vérifié, car!file_exists($dir)
reviendrafalse
et l'&&
opérateur est en court-circuit .Réponses:
Les deux reviendraient vrai sur les systèmes Unix - sous Unix, tout est un fichier, y compris les répertoires. Mais pour tester si ce nom est pris, vous devez vérifier les deux. Il pourrait y avoir un fichier normal nommé 'foo', qui vous empêcherait de créer un nom de répertoire 'foo'.
la source
is_writable
n'est-ce pas?la source
# 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
- pourquoi n'avez-vous pas simplement passé «$ filename»?Je pense que realpath () peut être le meilleur moyen de valider si un chemin existe http://www.php.net/realpath
Voici un exemple de fonction:
Version courte de la même fonction
Exemples de sortie
Usage
la source
La deuxième variante dans le message en question n'est pas correcte, car si vous avez déjà un fichier du même nom, mais que ce n'est pas un répertoire,
!file_exists($dir)
reviendrafalse
, le dossier ne sera pas créé, donc une erreur se"failed to open stream: No such file or directory"
produira. Sous Windows, il existe une différence entre les types de «fichier» et de «dossier», il faut donc utiliserfile_exists()
etis_dir()
en même temps, par exemple:la source
la source
la source
ajouter vrai après 0777
la source
Eh bien, au lieu de vérifier les deux, vous pourriez le faire
if(stream_resolve_include_path($folder)!==false)
. Il est plus lent mais tue deux oiseaux d'un coup.Une autre option consiste à simplement ignorer le
E_WARNING
, non pas en utilisant@mkdir(...);
(car cela annulerait simplement tous les avertissements possibles, non seulement le répertoire existe déjà), mais en enregistrant un gestionnaire d'erreurs spécifique avant de le faire:la source
J'avais le même doute, mais voyez le docu PHP:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Vous verrez que is-dir a les deux propriétés.
la source
Il s'agit d'une question ancienne, mais toujours d'actualité. Testez simplement avec la fonction
is_dir()
oufile_exists()
la présence du fichier.
ou..
dans le répertoire sous test. Chaque répertoire doit contenir ces fichiers:la source
C'est comme ça que je fais
la source
Un moyen de vérifier si un chemin est un répertoire peut être le suivant:
la source