【问题标题】:PHP Created file | SSH Can't delete (permission denied)PHP 创建的文件 | SSH 无法删除(权限被拒绝)
【发布时间】:2012-04-18 11:46:13
【问题描述】:

Linux SSH

我使用 php 在 php 中创建一个文件

if (!is_dir(DIR_FILE))
    mkdir(DIR_FILE, 0777);

$filename = DIR_FILE . $id . '.txt';

$handle_cf = fopen($filename, 'a');
fwrite($handle_cf, $data . "\n");
fclose($handle_cf);

chmod($filename, 0777);

chown($filename, "usr111");  //  usr111 = username
chgrp($filename, "usr111");  //  usr111 = group that is also attached to apache

文件获得以下权限。

-rwxrwxrwx 1 apache       apache       1447 Apr  4 12:48 D.txt
-rwxrwxrwx 1 apache       apache       1447 Apr  4 12:48 E.txt

但是,当我尝试在普通用户帐户 (usr111) 下删除文件时。我收到以下错误

[usr111@host session]$ rm D.txt 
rm: cannot remove `D.txt': Permission denied

注意:我可以删除根目录下的文件。

已修复! 即使我在 mkdir 上为 php 使用模式设置。由于某种原因,这不起作用。我添加了以下内容。

    if (!is_dir($dir)) {
        mkdir($dir, 0777);

        chmod($dir, 0777);
    }

【问题讨论】:

  • 这个文件所在目录的权限是什么?
  • 如果您使用普通用户帐户登录,PHP 或者更确切地说是 Apache 是文件所有者,您将无法删除它,除非每个人都有权这样做。否则,如果您使用 root 登录,则应该没有问题。
  • +MarcB drwxr-xr-x 2 apache apache 4096 Apr 4 12:48 session
  • +Francisc 有没有办法让这个用户能够删除其主文件夹中的 apache 文件?
  • @RichardW11: mkdir 将 umask 应用于您提供的模式,这可能是它不起作用的原因。

标签: php linux file-permissions


【解决方案1】:

mkdir 运行良好,但第二个参数不是权限,它是系统将与您当前的umask 一起使用的模式来计算要设置的权限。 来自手册:

模式也被当前的umask修改,你可以改变 使用 umask()。

您需要更改脚本以设置权限,而无需两次调用文件系统:

$oldUmask = umask(0); // disable umask
mkdir($path, 0777);
umask($oldUmask);  // reset the umask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2015-12-16
    • 2014-03-09
    相关资源
    最近更新 更多