Banyak kali, anda perlu mengalihkan fail dalam PHP atau menyimpan beberapa data di dalamnya. Dalam kedua-dua kes, mengetahui terlebih dahulu sama ada fail itu wujud boleh membantu kami mengelakkan beberapa tingkah laku yang tidak dijangka.
PHP datang dengan pelbagai fungsi untuk mengendalikan pelbagai jenis pertanyaan berkaitan fail. Dalam tutorial ini, saya akan memberikan anda gambaran ringkas tentang semua ciri ini supaya anda boleh memilih yang paling sesuai dengan keadaan anda.
Dalam kebanyakan kes, mungkin penting untuk menyemak sama ada fail wujud sebelum menjalankan operasi lain. Katakan tapak web anda membenarkan pengguna memuat naik fail imej ke pelayan anda untuk akses kemudian. Adil untuk mengandaikan bahawa jika ramai pengguna menggunakan perkhidmatan anda untuk kerap memuat naik berbilang fail, sentiasa ada kemungkinan konflik nama fail.
Dalam kes ini, menjadi penting untuk menyemak sama ada fail lain sudah wujud di lokasi yang anda mahu menyimpan fail yang paling baru dimuat naik oleh pengguna. Anda kemudian boleh memilih untuk mengambil langkah seperti menamakan semula fail kepada sesuatu yang lain atau memberitahu pengguna bahawa muat naik mereka akan menimpa fail sedia ada.
Mari pertimbangkan satu lagi senario di mana anda harus menambahkan data pada fail dalam PHP. Jika fail yang anda buat untuk menulis semua data anda dipadamkan atas sebab tertentu, fungsi seperti file_put_contents()
hanya akan mencipta fail baharu dengan nama yang ditentukan dan menyimpan data anda dalam fail yang baru dibuat. Ini mungkin wajar dalam beberapa kes, tetapi ini tidak selalu berlaku. Jadi, jika anda sudah menjangkakan fail itu wujud sebelum anda mula menulis data, adalah wajar untuk menyemak sama ada fail itu wujud lebih awal daripada masa. file_put_contents()
这样的函数只会创建一个具有指定名称的新文件,并将您的数据存储在新创建的文件中。在某些情况下这可能是可取的,但情况并非总是如此。因此,如果您在开始写入数据之前已经期望该文件存在,那么提前检查该文件是否存在是有意义的。
您可以使用三种不同的函数来检查 PHP 中是否存在文件。
第一个函数是file_exists()
。此函数接受一个参数,即文件所在的路径。请记住,对于现有文件和目录,它将返回 true。这可能足以满足您的需求,也可能不足以满足您的需求。
如果您想确保指定的路径指向文件而不是目录,可以考虑使用 is_file()
函数。同样,您可以使用 is_dir()
函数来检查您指定的路径是否存在以及是否指向目录。
<?php $name = "squares.txt"; $directory = "squares.zip"; if(file_exists($name)) { echo 'The file "'.$name.'" exists.'; } if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } if(is_dir($directory)) { echo '"'.$directory.'" turned out to be a directory.'; } ?>
The file "squares.txt" exists. "squares.txt" is indeed a file. "squares.zip" turned out to be a directory.
在上面的示例中,我故意将其中一个目录命名为 squares.zip 以表明进行自己的检查很重要,而不是假设提供的文件名实际上是文件名或目录.
请务必记住,is_file()
和 is_dir()
都将返回 false
,即使父目录没有正确的权限时实际存在的路径也是如此。
另外两个名为 is_read()
和 is_writable()
的函数除了检查文件是否存在之外,还可用于获取有关文件的一些额外信息。
顾名思义,is_read()
函数将检查两件事:第一,文件或目录确实存在,第二,文件可读。同样, is_writable()
函数也会检查两件事,即文件或目录存在并且可写。
<?php $name = "squares.txt"; if(is_readable($name)) { echo 'We can read "'.$name.'".'; } if(is_writable($name)) { echo 'We can also modify the contents of "'.$name.'".'; } ?>
We can read "squares.txt". We can also modify the contents of "squares.txt".
我建议您在解释这两个函数的返回值时要小心。例如,当 is_read()
返回 false 时,我们的第一直觉是认为我们查询的文件不可读。但是,如果文件不存在,该函数也会返回 false。始终牢记这些功能的这一方面非常重要。
调用所有这五个函数返回的返回值,即 file_exists()
、is_file()
、is_dir()
、is_read()
和is_writeable()
—已缓存。这意味着重复调用函数(例如 is_file()
)可能会显示过时的结果。
PHP 缓存这些函数的结果以提高性能。这可以确保查询同一文件的多个调用运行得更快。但是,即使文件在脚本执行过程中发生变化,它们的返回值也将保持不变。
仅缓存已存在文件的结果。这意味着,对于不存在的文件,调用函数 is_file()
将继续返回 false
,但一旦创建文件,就会开始返回 true
。另一方面,对于第一次调用期间存在的文件,该函数将继续返回 true
,即使该文件已被删除。
<?php $name = "squares.txt"; if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } // Manually delete the file while script waits. sleep(5); if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } clearstatcache(); if(is_file($name)) { echo '"'.$name.'" is indeed a file.'; } else { echo 'The file probably no longer exists.'; } ?>
如果您对实际存在的文件运行上述代码片段,然后在脚本等待期间手动将其删除,则调用 is_file()
仍将返回 true
。不过,在再次查询文件是否存在之前,只需调用 clearstatcache()
file_exists()
. Fungsi ini menerima satu parameter, iaitu laluan di mana fail terletak. Ingat, ia kembali benar untuk fail dan direktori sedia ada. Ini mungkin atau mungkin tidak mencukupi untuk keperluan anda. 🎜
🎜Jika anda ingin memastikan bahawa laluan yang ditentukan menghala ke fail dan bukannya direktori, pertimbangkan untuk menggunakan fungsi is_file()
. Begitu juga, anda boleh menggunakan fungsi is_dir()
untuk menyemak sama ada laluan yang anda tentukan wujud dan menghala ke direktori. 🎜
"squares.txt" is indeed a file. "squares.txt" is indeed a file. The file probably no longer exists.
is_file()
dan is_dir()
akan mengembalikan false
walaupun direktori induk sebenarnya wujud tanpa kebenaran yang betul Begitu juga dengan laluan. 🎜
🎜Periksa sama ada fail itu wujud dan boleh dibaca serta boleh ditulis🎜
🎜Dua fungsi lain bernama is_read()
dan is_writable()
boleh digunakan untuk mendapatkan beberapa maklumat tambahan tentang fail selain menyemak sama ada fail itu wujud. 🎜
🎜Seperti namanya, fungsi is_read()
akan menyemak dua perkara: pertama, fail atau direktori sebenarnya wujud, dan kedua, fail boleh dibaca. Begitu juga, fungsi is_writable()
juga menyemak dua perkara, iaitu fail atau direktori wujud dan boleh ditulis. 🎜
rrreee
keluaran
rrreee
🎜Saya cadangkan anda berhati-hati semasa mentafsir nilai pulangan kedua-dua fungsi ini. Sebagai contoh, apabila is_read()
mengembalikan palsu, naluri pertama kami ialah berfikir bahawa fail yang kami tanyakan tidak boleh dibaca. Walau bagaimanapun, fungsi ini juga mengembalikan palsu jika fail tidak wujud. Adalah penting untuk sentiasa mengingati aspek ciri ini. 🎜
🎜Berhati-hati dengan keputusan cache🎜
🎜Nilai pulangan yang dikembalikan dengan memanggil semua lima fungsi, iaitu file_exists()
, is_file()
, is_dir()
, is_read ()
dan is_writeable()
—dicache. Ini bermakna panggilan berulang ke fungsi (seperti is_file()
) mungkin menunjukkan hasil yang lapuk. 🎜
🎜PHP menyimpan cache hasil fungsi ini untuk meningkatkan prestasi. Ini memastikan berbilang panggilan yang menanyakan fail yang sama berjalan lebih pantas. Walau bagaimanapun, walaupun fail berubah semasa pelaksanaan skrip, nilai pulangannya akan kekal sama. 🎜
🎜Hanya keputusan cache untuk fail yang sudah wujud. Ini bermakna memanggil fungsi is_file()
akan terus mengembalikan false
untuk fail yang tidak wujud, tetapi akan mula mengembalikan true
sebaik sahaja fail dibuat. Sebaliknya, untuk fail yang wujud semasa panggilan pertama, fungsi akan terus mengembalikan true
walaupun fail telah dipadamkan. 🎜
rrreee
🎜Jika anda menjalankan coretan kod di atas terhadap fail yang sebenarnya wujud dan kemudian memadamkannya secara manual sementara skrip menunggu, memanggil is_file()
masih akan mengembalikan true
. Walau bagaimanapun, hanya memanggil clearstatcache()
sebelum menanya semula untuk melihat sama ada fail itu wujud akan memberikan anda hasil yang betul. 🎜
输出
"squares.txt" is indeed a file. "squares.txt" is indeed a file. The file probably no longer exists.
要记住的另一件事是,调用 unlink()
会自动清除缓存,因此稍后调用 is_file()
等函数时会得到新的结果。
本教程首先介绍了检查 PHP 中文件是否存在的重要性。之后,我们了解了可用于检查 PHP 中文件是否存在的不同函数。我们还了解了其中一些功能可能具有的优点和缺点。
正如我在最后提到的,PHP 将缓存其中一些函数调用的结果以提高性能。因此,请确保在对这些文件执行重要操作之前清除缓存。
Atas ialah kandungan terperinci Bagaimana untuk menyemak sama ada fail wujud dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!