62

有谁知道我如何检查一个目录是否可以用 PHP 写?

该功能is_writable不适用于文件夹。

编辑:它确实有效。请参阅已接受的答案。

4

10 回答 10

98

是的,它确实适用于文件夹....

如果文件名存在且可写,则返回 TRUE。文件名参数可能是一个目录名,允许您检查目录是否可写。

于 2008-09-20T20:09:44.923 回答
23

这是代码:)

<?php 

$newFileName = '/var/www/your/file.txt';

if ( ! is_writable(dirname($newFileName))) {

    echo dirname($newFileName) . ' must writable!!!';
} else {

    // blah blah blah
}
于 2010-09-23T22:58:49.347 回答
6

对所有者/组/世界更具体

$dir_writable = substr(sprintf('%o', fileperms($folder)), -4) == "0774" ? "true" : "false";

和平...

于 2011-05-25T07:38:58.713 回答
5

您可能正在向is_writable()函数发送完整的文件路径。is_writable()如果文件在目录中不存在,将返回 false。如果是这种情况,您需要检查已删除文件名的目录本身。如果你这样做,is_writable将正确地告诉你目录是否可写。如果$file包含您的文件路径,请执行以下操作:

$file_directory = dirname($file);

然后用于is_writable($file_directory)确定文件夹是否可写。

我希望这可以帮助别人。

于 2009-10-13T16:31:01.917 回答
4

根据is_writable 的文档,它应该可以正常工作 - 但您说的是“文件夹”,所以这可能是Windows 问题。评论提出了一种解决方法

(早先的匆忙阅读让我认为尾部斜杠很重要,但事实证明这是针对此工作的)。

于 2008-09-20T20:10:17.587 回答
3

我编写了一个小脚本(我称之为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>';
    } 
}
?>
于 2017-08-10T02:39:15.643 回答
2

统计()

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

http://us2.php.net/stat

于 2008-09-20T20:12:29.253 回答
1

根据 PHP 手册is_writable应该可以在目录上正常工作。

于 2008-09-20T20:09:45.640 回答
1

在我的情况下,is_writable返回 true,但是当尝试写入文件时 - 生成了错误。
此代码有助于检查是否$dir存在并且可写:

<?php
$dir = '/path/to/the/dir';

// try to create this directory if it doesn't exist
$booExists     = is_dir($dir) || (mkdir($dir, 0774, true) && is_dir($dir));
$booIsWritable = false;
if ($booExists && is_writable($dir)) {
    $tempFile = tempnam($dir, 'tmp');
    if ($tempFile !== false) {
        $res = file_put_contents($tempFile, 'test');

        $booIsWritable = $res !== false;
        @unlink($tempFile);
    }
}
于 2019-03-07T15:30:48.060 回答
0

我就是这样做的:

创建一个文件file_put_contents()并检查返回值,如果它是正数(写入字节数)那么你可以继续做你必须做的事情,如果它是 FALSE 那么它是不可写的

$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');
于 2015-06-16T12:11:57.087 回答