Ich möchte ein Verzeichnis erstellen, wenn es noch nicht existiert.
Ist is_dir
genug für diesen Zweck zu verwenden?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
Oder sollte ich kombinieren is_dir
mit file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
neben||
/&&
.&&
ist hier nicht sinnvoll, denn wenn die Datei nicht vorhanden ist (!file_exists($dir) == true
), handelt es sich sicher nicht um ein Verzeichnis. Und wenn eine Datei vorhanden ist,!is_dir($dir)
wird diese nicht überprüft, da!file_exists($dir)
sie zurückkehrtfalse
und der&&
Bediener kurzgeschlossen ist .Antworten:
Beide würden auf Unix-Systemen true zurückgeben - unter Unix ist alles eine Datei, einschließlich Verzeichnisse. Um zu testen, ob dieser Name verwendet wird, sollten Sie beide überprüfen. Möglicherweise gibt es eine reguläre Datei mit dem Namen "foo", die Sie daran hindert, einen Verzeichnisnamen "foo" zu erstellen.
quelle
is_writable
nicht wahr ?quelle
# 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
- warum haben Sie nicht einfach '$ filename' übergeben?Ich denke, realpath () ist möglicherweise der beste Weg, um zu überprüfen, ob ein Pfad vorhanden ist. Http://www.php.net/realpath
Hier ist eine Beispielfunktion:
Kurzversion der gleichen Funktion
Ausgabebeispiele
Verwendungszweck
quelle
Die zweite Variante im fraglichen Beitrag ist nicht in Ordnung, denn wenn Sie bereits eine Datei mit demselben Namen haben, es sich jedoch nicht um ein Verzeichnis handelt,
!file_exists($dir)
wird zurückgegebenfalse
, der Ordner wird nicht erstellt, sodass ein Fehler"failed to open stream: No such file or directory"
auftritt. In Windows gibt es einen Unterschied zwischen ‚Datei‘ und ‚Ordner‘ Typen, so verwenden müssen,file_exists()
undis_dir()
zur gleichen Zeit, für ex .:quelle
quelle
quelle
addiere true nach 0777
quelle
Anstatt beides zu überprüfen, könnten Sie es tun
if(stream_resolve_include_path($folder)!==false)
. Es ist langsamer , tötet aber zwei Fliegen auf einmal.Eine andere Möglichkeit besteht darin, das einfach zu ignorieren
E_WARNING
, nicht indem Sie es verwenden@mkdir(...);
(da dies einfach auf alle möglichen Warnungen verzichten würde, nicht nur das bereits vorhandene Verzeichnis), sondern indem Sie einen bestimmten Fehlerbehandler registrieren, bevor Sie dies tun:quelle
Ich hatte den gleichen Zweifel, aber siehe PHP-Dokument:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Sie werden sehen, dass is-dir beide Eigenschaften hat.
quelle
Dies ist eine alte, aber immer noch aktuelle Frage. Nur Test mit der
is_dir()
oderfile_exists()
Funktion für das Vorhandensein von der.
oder..
Datei im Verzeichnis unter Test. Jedes Verzeichnis muss folgende Dateien enthalten:quelle
So mache ich das
quelle
Es gibt folgende Möglichkeiten, um zu überprüfen, ob ein Pfad ein Verzeichnis ist:
quelle