【问题标题】:fopen() in PHP not creating or writing to txt filePHP中的fopen()没有创建或写入txt文件
【发布时间】:2020-12-05 01:03:30
【问题描述】:

我收到以下警告:

警告:fopen(Uploaded_Files/dataFile1.txt):无法打开流:第 17 行 /opt/lampp/htdocs/PHP_Course_Practice/Superglobals/data_upload.php 中的权限被拒绝

  • 我正在为 7.4.8-0 使用 XAMPP
  • 使用我的 MacBook 作为本地主机来学习 PHP。我对编码很陌生。
  • 我试过了:
    • 在 fopen() 中写入文件 dataFile1.txt 的整个路径,但这并没有解决问题
    • 在 PHP.ini 中检查 allow_url_fopen 已打开
    • 在 PHP 文件顶部包含整个路径,但也没有解决问题
    • 还尝试了chown -R www-data:www-data folder(其中文件夹是文件夹的完整路径),终端说chown: www-data: illegal group name
    • 还尝试了sudo dseditgroup -o edit -a daemon -t user wheel(先到 Superglobals 文件夹,然后到 Xampp 的根文件夹)
  • fopen() 尝试访问并写入文件的完整路径是: /opt/lampp/htdocs/PHP_Course_Practice/Superglobals/Uploaded_Files/dataFile1.txt
  • 我并不热衷于使用 777,因为我在各种文章中看到使用它不安全。

代码是:

<?php
$document_root = $_SERVER["DOCUMENT_ROOT"];
$fileRoot = $document_root . "/PHP_Course_Practice/Superglobals/Uploaded_Files/dataFile1.txt";
echo "Root: $document_root";
include($document_root . "/PHP_Course_Practice/Superglobals/Uploaded_Files/dataFile1.txt");
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
  </head>
  <body>

<?php
if (isset($_POST["submit"])) {
  $dataFile1 = fopen("Uploaded_Files/dataFile1.txt", "w");
  $dataFile1Txt = "My age is " . $_POST["age"] . ".";
  fwrite($dataFile1, $dataFile1Txt);
  echo $dataFile1;
  fclose($dataFile1);
}
?>

<form action="data_upload.php" method="post">
  <input type="text" name="age">
  <input type="submit" name="submit">
</form>

  </body>
</html>

【问题讨论】:

标签: php fopen permission-denied lampp


【解决方案1】:

检查网络用户。

<?php
echo exec("whoami");

并将用户添加到您的组。

sudo usermod -a -G <groupName> <userName>

最后,检查文件的权限设置。

【讨论】:

  • 谢谢,联盛。如何检查文件的权限设置?是通过使用终端吗?而且,如果文件在终端中,我应该写什么命令来检查文件的权限设置?再次感谢您。
  • 使用 echo exec("whoami");给了守护进程。在这种情况下,我在 里面写什么?守护进程是 groupName 吗?
  • @KodeMonk daemon 是用户名,组名是您的目录所有者的组。您可以输入ls -l 来查看所有者和组。
  • 感谢您的详细解答。我试过了,它要求输入密码。输入 MacBook 的密码后,它显示“sudo: usermod: command not found”
  • 对不起,我的错,我误以为mac和linux的命令基本一样。。。试试看? superuser.com/a/214311/1208900
【解决方案2】:

您应该尝试检查要打开的文件或目录的权限。 之后,您可以向该目录添加递归读写权限,如下所示

$ chmod -R 770 /path/toyour/directory

【讨论】:

  • 谢谢。请问如何检查文件或目录的权限?
  • @KodeMonk 使用 ls -l /directorynamels -l /path/to/filename
【解决方案3】:

我可以解决它的方法是下载并安装 XAMPP 的 -虚拟机版本。似乎 XAMPP (LAMPP) 的 VM 版本不适合 localhost 上的权限,除非您可能热衷于 777 的非安全打开。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多