如何检查一个目录是否可以在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)来确定文件夹是否可写。

我希望这可以帮助别人。

STAT()

很像系统统计,但在PHP中。 你想要检查的是模式值,就像你在其他语言(IE C / C ++)中调用stat一样。

http://us2.php.net/stat

根据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>'; } } ?>