如何检查一个目录是否可以在PHP中写入?
有谁知道我可以检查,看看目录是否可以在PHP中写入?
函数is_writable
不适用于文件夹。 (编辑:它工作,看到接受的答案。)
是的,它可以用于文件夹….
如果文件名存在且可写,则返回TRUE。 文件名参数可能是一个目录名称,允许您检查目录是否可写。
这是代码:)
<?php $newFileName = '/var/www/your/file.txt'; if ( ! is_writable(dirname($newFileName))) { echo dirname($newFileName) . ' must writable!!!'; } else { // blah blah blah }
对所有者/团体/世界更具体
$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";
和平…
根据is_writable的文档 ,它应该只是工作 – 但你说“文件夹”,所以这可能是Windows的问题 。 评论提出了一个解决方法 。
(之前的一个匆忙的阅读让我认为,后面的斜线很重要,但是这个工作原来是特定的)。
您可能正在向is_writable()
函数发送一个完整的文件path。 如果文件不存在于目录中, is_writable()
将返回false。 如果是这种情况,你需要检查目录本身的文件名。 如果你这样做, is_writable
将正确地告诉你该目录是否可写。 如果$file
包含您的文件path,请执行以下步
$file_directory = dirname($file);
然后使用is_writable($file_directory)
来确定文件夹是否可写。
我希望这可以帮助别人。
根据PHP手册, is_writable应该可以在目录上正常工作。
这是我如何做到这一点:
用file_put_contents()
创build一个文件,并检查返回值,如果是正数(写入字节数),那么你可以继续做,你必须做的,如果它是假的,那么它是不可写的
$is_writable = file_put_contents('directory/dummy.txt', "hello"); if ($is_writable > 0) echo "yes directory it is writable"; else echo "NO directory it is not writable";
那么你可以通过使用unlink()来删除这个虚拟文件
unlink('directory/dummy.txt');
我写了一个脚本(我称之为isWritable.php ),它检测脚本所在的同一目录中的所有目录,并写入页面以确定每个目录是否可写。 希望这可以帮助。
<?php // isWritable.php detects all directories in the same directory the script is in // and writes to the page whether each directory is writable or not. $dirs = array_filter(glob('*'), 'is_dir'); foreach ($dirs as $dir) { if (is_writable($dir)) { echo $dir.' is writable.<br>'; } else { echo $dir.' is not writable. Permissions may have to be adjusted.<br>'; } } ?>