Saya ingin membuat direktori jika belum ada.
Apakah is_dir
cukup menggunakan untuk tujuan itu?
if ( !is_dir( $dir ) ) {
mkdir( $dir );
}
Atau haruskah saya gabungkan is_dir
dengan file_exists
?
if ( !file_exists( $dir ) && !is_dir( $dir ) ) {
mkdir( $dir );
}
or
/and
selain||
/&&
.&&
tidak berguna di sini, karena, jika file tidak ada (!file_exists($dir) == true
), pasti itu bukan direktori. Dan jika file ada,!is_dir($dir)
tidak akan diperiksa, karena!file_exists($dir)
akan kembalifalse
dan&&
operator mengalami hubungan pendek .Jawaban:
Keduanya akan mengembalikan true pada sistem Unix - di Unix semuanya adalah file, termasuk direktori. Tetapi untuk menguji apakah nama itu diambil, Anda harus memeriksa keduanya. Mungkin ada file biasa bernama 'foo', yang akan mencegah Anda membuat nama direktori 'foo'.
sumber
is_writable
bukan?sumber
# 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
- mengapa Anda tidak memberikan '$ filename' saja?Saya pikir realpath () mungkin cara terbaik untuk memvalidasi jika ada jalan http://www.php.net/realpath
Berikut ini contoh fungsinya:
Versi singkat dari fungsi yang sama
Contoh keluaran
Pemakaian
sumber
Varian kedua dalam postingan pertanyaan tidak ok, karena, jika Anda sudah memiliki file dengan nama yang sama, tetapi itu bukan direktori,
!file_exists($dir)
akan kembalifalse
, folder tidak akan dibuat, sehingga kesalahan"failed to open stream: No such file or directory"
akan terjadi. Di Windows ada perbedaan antara tipe 'file' dan 'folder', jadi perlu menggunakanfile_exists()
danis_dir()
pada saat yang sama, untuk ex .:sumber
sumber
sumber
tambahkan true setelah 0777
sumber
Nah alih-alih memeriksa keduanya, Anda bisa melakukannya
if(stream_resolve_include_path($folder)!==false)
. Itu lebih lambat tetapi membunuh dua burung dalam satu tembakan.Pilihan lain adalah mengabaikan saja
E_WARNING
, bukan dengan menggunakan@mkdir(...);
(karena itu hanya akan menghapus semua kemungkinan peringatan, bukan hanya direktori yang sudah ada), tetapi dengan mendaftarkan penangan kesalahan tertentu sebelum melakukannya:sumber
Saya memiliki keraguan yang sama, tetapi melihat dokumen PHP:
https://www.php.net/manual/en/function.file-exists.php
https://www.php.net/manual/en/function.is-dir.php
Anda akan melihat bahwa is-dir memiliki kedua properti.
sumber
Ini adalah pertanyaan lama, tapi masih hangat. Cukup uji dengan
is_dir()
ataufile_exists()
fungsi untuk keberadaan.
atau..
file dalam direktori yang diuji. Setiap direktori harus mengandung file-file ini:sumber
Inilah yang saya lakukan
sumber
Cara untuk memeriksa apakah path adalah direktori dapat mengikuti:
sumber