在/opt/lampp/htdocs中,打开流失败:权限被拒绝。

14

我正在使用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并发布输出。 - Hackerman
5个回答

27

这个错误是由于文件权限引起的。PHP/Apache用户没有在目录中写入的权限。解决方法之一是使用命令chmod更改目录的模式字节。如果您的会话用户不拥有该目录,则需要超级权限执行此修改。

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

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

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


8
将权限更改为 777 是一个不好的主意,因为它给任何人都读写目录的权限。 在 Ubuntu 中,Apache 用户通常是 www-data (uid=33)。使用以下命令将目录的所有者更改为此用户:chown -R www-data /path/to/directory - Sofyan Thayf
我尝试了这个命令,它可以正常工作。$sudo chmod 0422 login.txt - Biranchi

8

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

方法一:

查找Web服务器用户

ps aux | grep httpd

注意:如果您没有更改它,它将默认为“daemon”。 Web服务器名称 在我的情况下,它是“daemon”,请在以下命令中用您的替换它。
sudo chown -R daemon /opt/lampp/htdocs/[Working Project]/

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

方法2:

给该文件赋予所有权限。

以下命令为UserGroupOwner赋予ReadWriteExecute权限。因此,User是您,可以修改它,其他程序如文本编辑器也可以编辑它们,PHP也可以。

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

这里使用数字给出权限。
  • 7表示所有权限(读、写和执行)。
  • 6表示读和写。
  • 5表示读和执行。
  • 4表示只读。
权限按照ugo模式授予。
  • 777中的第一个7是为用户设置的。
  • 第二个7是为设置的。
  • 最后一个7是为其他人设置的。

替代命令:

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

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

建议:

大多数情况下,方法2不适用。我建议使用第一种方法,因为方法2只会给一个文件读、写和执行权限,而该文件必须由您手动创建。如果您想让php根据网站上的逻辑创建文件,那么这种方法就行不通了。如果守护进程是所有者,它才能这样做。


5

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

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

请提供更详细的描述。 - Abilogos
我试图通过我的项目创建目录和文件,但它还没有写入权限。所以我运行了那个命令,让我的htdocs拥有所有需要的权限777 - 表示读/写/执行。然后它就可以工作了。 - Zenonymous
1
非常感谢您,亲爱的。我从早上8点开始一直在寻找这个问题,现在终于得到了解决。非常感谢。 - code by Abhishek Bharti

3

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

$ sudo chmod -R 755 /directory

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

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


0
我建议两件事情。首先,定义到您的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 服务器正在以哪个用户身份运行,并将该用户的读/写权限授予该文件夹。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接