如何检查文件是否有访问被拒绝以及如何在php中为文件提供权限(777)?

时间:2010-01-05 11:05:47

标签: php linux file-access

我在ubuntu上使用php工作。当我在拒绝访问的网页上使用任何图像时,页面上会出现警告。我想在显示之前检查它,如果它没有权限打开,那么给它打开的权限。正如我们在终端命令中所做的那样。

chmod 777 myimage.jpg

如何检查并在php中完全访问文件。

由于

5 个答案:

答案 0 :(得分:8)

检查功能is_readable()is_writable()

示例:

$filename = '/home/myuser/example.txt';

if (is_readable($filename) && is_writable($filename))
{
    echo "File has read and write permissions.";
}

答案 1 :(得分:2)

使用is_readable()检查文件是否可由PHP进程读取。

使用chmod()更改文件的权限。

此外,您可以使用is_writable()来测试是否可以写入文件,并使用file_exists()来检查文件是否存在。

答案 2 :(得分:2)

您可以做的一件事是使用fileowner函数(和posix_getpwuid)并与您的PHP用户进行比较(通常是www-data)。

如果用户相同,您可以根据需要更改权限。但首先要检查文件是否可写。

更新:chmodchown函数在成功时返回TRUE,在失败时返回FALSE,因此将它们放在if子句中是个好主意。您可以通过在脚本开头设置error_reporting(0);或使用@符号来抑制错误输出:

if ( @chmod($filename, 0666) ) {
    // do whatever with file
}
else if ( @chown($filename, 1000) ) {
    chmod($filename, 0666);
    // do whatever with file
}
else {
    // can't change permissions
}

答案 3 :(得分:1)

每次引用文件时都会从PHP中执行此操作是管理文件的一种非常低效的方法。它还要求通过PHP脚本调解所有文件访问权限。此外,从安全的角度来看,允许内容是世界可写的是相当混乱的。

我会先运行一个管理脚本来整理现有文件的权限,然后在新文件进入系统时解决问题。

当然,如果你没有像webserver uid那样获得shell访问/ shell访问权限,那么你必须使用PHP(因此readdir / is_readable / is_writeable)来实现它。

如果不知道文件在网络服务器上的显示方式,很难推荐具体的解决方案。

下进行。

答案 4 :(得分:0)

要使文件可读/写可执行的一件事是在创建文件/文件夹时调用此函数而不使用第二个参数:

function AutoChmod($path, $chmod = null)
{
    if (file_exists($path) === true)
    {
        if (is_null($chmod) === true)
        {
            $chmod = (is_file($path) === true) ? 644 : 755;

            if (in_array(get_current_user(), array('apache', 'httpd', 'nobody', 'system', 'webdaemon', 'www', 'www-data')) === true)
            {
                $chmod += 22;
            }
        }

        return chmod($path, octdec(intval($chmod)));
    }

    return false;
}

示例:

AutoChmod('/path/to/file/you/just/created.txt');

无论您是否使用SuPHP / SuExecPHP,此功能都将给予适当的许可。


要检查权限,您只需使用is_readable()is_writable()

功能