无法打开流:/ opt / lampp / htdocs中的权限被拒绝

Ani*_*esh 3 php linux warnings login file

我正在使用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
Run Code Online (Sandbox Code Playgroud)

我的代码:

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

$myfile = file_put_contents('login.txt', $input.PHP_EOL , FILE_APPEND | LOCK_EX);
Run Code Online (Sandbox Code Playgroud)

小智 10

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

$ sudo chmod -R 777 /path/to/directory
Run Code Online (Sandbox Code Playgroud)

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` (2认同)

Att*_*han 7

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

方法一:

查找网络服务器用户

ps aux | grep httpd
Run Code Online (Sandbox Code Playgroud)

注意:如果您没有更改它,它将默认为守护进程

网络服务器名称

在我的情况下,它是daemon,在以下命令中用你的替换它。

sudo chown -R daemon /opt/lampp/htdocs/[Working Project]/
Run Code Online (Sandbox Code Playgroud)

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

方法二:

授予该文件的所有权限。

下面的命令给出了ReadWriteExecute权限UserGroupOwner。那么User就是你,谁也可以对其进行修改,其他程序,如文本编辑器还可以对其进行编辑,因此PHP了。

sudo chmod 777 /opt/lampp/htdocs/[Working Project]/File.txt
Run Code Online (Sandbox Code Playgroud)

这里使用数字提供权限

  • 7用于所有权限readwrite并且execute.
  • 6用于readwrite
  • 5用于readexecute
  • 4仅用于read

权限以 ugo 模式授予。

  • 777 中的前 7 个用于User.
  • 2nd 是为了Group
  • 最后是为Others.

替代命令:

sudo chmod u+rwx,g+rwx,o+rwx /opt/lampp/htdocs/[Working Project]/File.txt
Run Code Online (Sandbox Code Playgroud)

在这里更清楚的是您分配给谁的权限。sou代表用户,并被分配了读取(r)、写入(w)和执行(e)权限,类似地g是组和o其他。

建议:

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


小智 5

您可以在终端中运行以下命令,为该htdocs文件夹及其所有内容授予所有权限(对所有用户进行读/写/执行)。请注意,这无论如何都不安全,尤其是在生产中!

$ sudo chmod -R 777 /opt/lampp/htdocs/ 
Run Code Online (Sandbox Code Playgroud)