![Apache 不允许 PHP 创建文件](https://linux22.com/image/1126314/Apache%20%E4%B8%8D%E5%85%81%E8%AE%B8%20PHP%20%E5%88%9B%E5%BB%BA%E6%96%87%E4%BB%B6.png)
我正在尝试使用 Ubuntu 中 localhost 中的 HTML 和 PHP 保存数据。我的 HTML 和 PHP 文件运行良好,但当我使用命令在 localhost 中打开文件时
$myfile = fopen("testfile.txt", "w")
它不允许创建它,但是 PHP 文件正在运行,并且当使用命令设置从 PHP 输出变量时它运行良好。
如何允许 PHP 在本地主机 Ubuntu 上的 Apache 中创建文件。
答案1
您必须允许 Apache 用户(通常是www-data
)在该目录中创建文件。这可以通过将 Apache 设为目录的所有者来实现,例如,如果目录名为my-dir
,您可以打开终端并运行以下命令:
sudo chown www-data my-dir
答案2
如 Apache2 Ubuntu 默认页面所述:默认情况下,Ubuntu 不允许通过 Web 浏览器访问除位于 /var/www 中的文件之外的任何文件...。这意味着您要写入的任何目录或文件都必须位于 /var/www 下。我自己错过了这个信息,并且在尝试写入 /tmp 等时弄得头疼了好一会儿。
答案3
如果要更改该目录中的所有文件夹和文件(而不仅仅是目录),请添加 -R,如下所示
sudo chown -R www-data my-dir
答案4
如果您正在创建文件飞你呢不想将其保存在服务器上但反而在客户端电脑上下载在客户端触发某个操作后,例如按钮点击来自用户网页浏览器,你可以写PHP代码如下;
<?php
$dataToWriteToFile = "This Text has been saved in this Text File and Downloaded for you to View !";
$fileName = "TxtFilename.txt";
$file = fopen($fileName,"wb");
fwrite($file, $dataToWriteToFile);
fclose($file);
header('Content-Type: charset=utf-8');
header("Content-disposition: attachment; filename=$fileName");
print $dataToWriteToFile;
?>
免责声明:对于那些打算将文件写入服务器进行存档的人来说,它不起作用,但对于任何其他为了让其客户端用户将其下载到他们的网络浏览器而动态创建文件的人来说,它可能足以达到此目的。
我正要与我的客户交谈,请求他们允许 Apache 用户为 Apache 用户添加更多权限(正如先前的答案和互联网上其他相关问题所建议的那样) 允许将文件写入提供其服务器网页的文件夹。我几乎可以肯定,对于他们来说,同意这一点将是一项艰巨的任务,但幸运的是,上述代码对我来说是有效的。