【问题标题】:PHP file permissions, chmod & mkdir not workingPHP 文件权限、chmod 和 mkdir 不起作用
【发布时间】:2020-07-12 19:23:58
【问题描述】:

我创建了一个 php 函数,它允许我将图像添加到我的 Web 应用程序项目中的文件夹中。现在,它仅在我手动将文件夹的权限设置为启用写入时才有效。不幸的是,这并不是我所需要的,因为当我使用 git 将我的代码推送给我的组成员时,他们仍然必须手动设置文件夹的权限以启用写入,以便我推送的代码能够工作。我和我所有的组成员都通过 apache 服务器在本地运行这个项目,我认为问题是 apache 无权在项目中的任何文件夹中写入,除非文件夹以某种方式设置为对每个人启用写入.我觉得告诉我的所有组成员更改他们的文件夹权限只是让我的一个函数可以写入文件夹是不可行的。

我正在寻找一种在我的 php 代码中设置文件权限的方法,我已经尝试过诸如 chmodmkdir 之类的 php 函数来设置权限,但是它给了我一个错误,说我没有权限使用这些功能,我认为这是有道理的,但有没有可能的解决方法?

【问题讨论】:

  • 最好将问题发送给edit,以包括目录结构和有关安装位置的权限的一些注释。甚至可能是关于你的队友正在执行代码的用户的注释;他们都使用Apache执行它吗?每个人都使用相同的操作系统吗?哪个操作系统?

标签: php file-permissions chmod


【解决方案1】:
<?php $result = mkdir ("/path/to/directory", "0777");
 ?>

试试这个就行了

【讨论】:

    【解决方案2】:
    $structure = 'path';
    mkdir($structure, 0777, true)
    

    $structure = 'path';
    mkdir($structure)
    chmod($structure, 0777);
    

    【讨论】:

    • 为避免权限错误,将这些逗号运行到您的应用程序路径 chown -R www-data:www-data /path/to/app chmod -R g+rw /path/to/app
    • 这是一个将在终端中运行的命令吗?在我推送我的代码后,我的所有组成员是否也必须在他们自己的终端上运行此命令?如果是这种情况,那么这并不能解决我的问题。
    • @cj32 您的 apache 用户 www-data 必须有权访问该目录,以便它正在运行的代码对该目录进行 chmod。世界上没有魔法可以改变这一事实。您的小组成员将需要正确设置他们的环境以进行构建和测试,其中一个步骤将正确设置权限(就像其中一个步骤是安装 apache 和 php)。如果有办法解决这个问题,那将是一个安全漏洞,对吧?
    • @cj32 另一个选择可能是将整个东西扔进一个容器中,这样您就可以放置所有这些先决条件设置(Web 服务器的安装、php、cfg/ini、文件系统、权限等)在 dockerfile 中。这显然是一个相当大的变化,但它允许您推动/传播环境变化。最后,您仍然必须执行此答案中概述的步骤。
    【解决方案3】:

    尝试使用这个(如果允许 shell_exec()):

    (问题列表:仅适用于 linux,在帖子底部有潜在解决方案的安全问题)

    <?php
    function readFile($file) { return shell_exec("cat $file"); }
    function writeFile($file,$cont) { return shell_exec("echo $cont > $file"); }
    function makeFile($filename) { return shell_exec("touch $filename"); }
    function makeFolder($filename) { return shell_exec("mkdir -pv $filename"); }
    // the -pv was used so you could do makeFolder("1/2/3/4")
    function appendFile($file,$cont) { fileWrite($file,readFile($file).$cont); }
    function appendToTopOfFile($file,$cont) { fileWrite($file,$cont.readFile($file);); }
    ?>
    

    使用escapeshellcmdescapeshellargs 转义用户输入。 例如。

    $file=escapeshellcmd($_GET['file']);
    echo readFile($file);
    

    【讨论】:

      猜你喜欢
      • 2011-04-15
      • 2015-01-18
      • 2011-05-02
      • 1970-01-01
      • 2010-10-18
      • 2011-03-08
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多