【问题标题】:failed to open stream: Permission denied in /opt/lampp/htdocs无法打开流:/opt/lampp/htdocs 中的权限被拒绝
【发布时间】:2017-08-25 22:34:25
【问题描述】:

我使用的是 Ubuntu 16.04 和 xampp 5.6.30。我正在尝试使用带有验证的文件创建一个简单的登录程序,但是在将数据放入名为“login.txt”的文件时遇到了问题。

错误:

file_put_contents(login.txt): failed to open stream: Permission denied in /opt/lampp/htdocs/PHP/Practice/PHP Functions/Login Validation/login.php on line 38

我的代码:

$input = $userName.'|'.$userPassword.'\n';

$myfile = file_put_contents('login.txt', $input.PHP_EOL , FILE_APPEND | LOCK_EX);

【问题讨论】:

  • 这是一个权限被拒绝错误...您是否将login.txt 文件保存在/opt/lampp/htdocs/PHP/Practice/PHP Functions/Login Validation/ 文件夹中?...如果没有,则运行此命令stat theFolder 并发布输出。

标签: php linux file login warnings


【解决方案1】:

此错误是由于文件权限引起的。 php/apache 用户没有该目录的写入权限。解决此问题的一种方法是使用命令 chmod 更改目录的 mod 字节。如果您的会话用户不拥有该目录,则您需要超级权限才能执行此修改。

$ sudo chmod -R 777 /path/to/directory

mod 777 为系统上的每个用户设置读/写和执行目录。 R 选项递归地将修改应用于每个文件和子目录。因此,您可以一次更改 htdocs 目录中所有内容的权限。

https://linux.die.net/man/1/chmod

【讨论】:

  • 将权限更改为 777 是个坏主意,因为它允许任何人读取和写入目录。在 Ubuntu 中,apache 用户通常是 www-data (uid=33)。将目录的所有者更改为该用户:chown -R www-data /path/to/directory
  • 我试过这个命令和它的工作原理。 $sudo chmod 0422 login.txt
【解决方案2】:

我会推荐两件事。首先,定义 login.txt 文件的完整路径。

$input = $userName.'|'.$userPassword.'\n';

$loginFile = "/opt/lampp/htdocs/PHP/Practice/PHP Functions/Login Validation/login.txt"

$myfile = file_put_contents($loginFile, $input.PHP_EOL , FILE_APPEND | LOCK_EX);

其次,您尝试写入的直接地址:

/opt/lampp/htdocs/PHP/Practice/PHP Functions/Login Validation/

不可写。检查 Web 服务器以哪个用户身份运行,并授予该用户对该文件夹的读/写权限。

【讨论】:

    【解决方案3】:

    权限错误可以通过以下两种方法解决。

    方法一:

    查找网络服务器用户

    ps aux | grep httpd
    

    注意:如果您没有更改它,它将默认为 daemon

    Web Server Name

    在我的例子中它是 daemon,在下面的命令中用你的替换它。

    sudo chown -R daemon /opt/lampp/htdocs/[Working Project]/
    

    在 Linux 中,chown 用于更改任何文件夹或文件的所有权。因此,此命令将该文件夹的所有权授予daemon 用户,这将使daemon 用户能够完全访问该文件夹以及其中的所有内容。

    方法二:

    授予该文件的所有权限。

    以下命令将ReadWriteExecute 授予UserGroupOwner 的权限。所以User是你,也可以修改,其他程序比如文本编辑器也可以修改,PHP也一样。

    sudo chmod 777 /opt/lampp/htdocs/[Working Project]/File.txt
    

    这里使用数字提供权限

    • 7 适用于所有权限 readwriteexecute
    • 6 用于readwrite
    • 5 用于readexecute
    • 4 仅用于 read

    权限以 ugo 模式授予。

    • 777 中的前 7 个用于 User
    • 第二个是Group
    • 最后一个是Others

    替代命令:

    sudo chmod u+rwx,g+rwx,o+rwx /opt/lampp/htdocs/[Working Project]/File.txt
    

    在这里更清楚的是您将哪些权限分配给了谁。所以u 代表用户,并且被分配了读取(r)、写入(w)和执行(e)权限,同样g 代表组,o 代表其他。

    建议:

    方法2不适用于大部分场景。我建议使用第一种方法,因为方法 2 只会授予文件的读取、写入和执行权限,其中该文件必须由您首先手动创建。如果您希望 php 根据您在网站中的逻辑创建文件怎么办。在这种情况下,此方法将不起作用。如果守护进程将成为所有者,则它只能这样做。

    【讨论】:

      【解决方案4】:

      此错误是由于文件权限引起的。文件或文件夹用户没有目录写入权限。

      $ sudo chmod -R 755 /directory
      

      755 – 这组权限常用于 Web 服务器。所有者拥有读取、写入和执行的所有权限。其他人只能读取和执行,但不能对文件进行更改。

      https://www.maketecheasier.com/file-permissions-what-does-chmod-777-means/

      【讨论】:

        【解决方案5】:

        您可以在终端中运行以下命令以授予htdocs 文件夹及其所有内容的所有权限(所有用户的读/写/执行)。请注意,这在任何方面都不安全,尤其是在生产环境中!

        $ sudo chmod -R 777 /opt/lampp/htdocs/ 
        

        【讨论】:

        • 请多描述一下
        • 我试图通过我的项目创建一个目录和文件,但它还没有写权限。所以我运行该命令以使我的 htdocs 拥有它需要的所有权限 777 - 意味着读/写/执行。然后它起作用了。
        • 非常感谢亲爱的。我从早上 8 点开始一直在寻找这个问题,现在我得到了和。非常感谢
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-29
        • 2011-06-22
        • 2015-12-16
        • 2015-11-15
        • 2017-09-23
        • 2015-02-01
        相关资源
        最近更新 更多