【问题标题】:How to write file from within php - Permission denied如何从 php 中写入文件 - 权限被拒绝
【发布时间】:2017-04-01 15:01:10
【问题描述】:

很抱歉提出一个基本问题,但我找不到答案。我正在尝试从 PHP 中写入文件,但由于权限被拒绝而失败,我不知道为什么。 我的代码是

<!DOCTYPE HTML> 
<html>
<head>
    <title>File test</title>

<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);

echo 'Current script owner: ' . get_current_user();
echo '<br>WhoAmI: '. shell_exec( 'whoami' );
echo '<br>cwd: '.getcwd();
$plist = fopen("plist.txt", "w") or die("Unable to open file!");
fwrite($plist, 'some text');
fclose($plist);
?>

这是我看到的输出

Current script owner: mick
WhoAmI: www-data
cwd: /home/mick/Documents/www/test
Warning: fopen(plist.txt): failed to open stream: Permission denied in /home/mick/Documents/www/test/fileTest.php on line 13
Unable to open file!

我的用户 (mick) 显然拥有我要写入的目录,并且 www-data 是“mick”组的成员。我还将目录设置为 777 以尝试使其正常工作,但仍然出现错误。我在这里错过了什么?

【问题讨论】:

  • 老兄,运行ls -la /home/mick/Documents/www/test
  • 当前文件路径是什么,文本文件的路径是什么?
  • 返回 -rw-r--r-- 1 mick mick 374 Apr 1 15:33 fileTest.php
  • 代码在 /home/mick/Documents/www/test/ 我认为它应该在同一目录中创建 txt 文件

标签: php permissions


【解决方案1】:

您需要为 www-data 用户授予权限。您可以通过运行以下命令来完成:

sudo chown www-data:www-data /home/mick/Documents/www/test
sudo chmod 777 /home/mick/Documents/www/test

以上代码为用户 www-data 提供了对该目录的完全访问权限。

或者添加 w+ 内 fopen。如果文件不存在,它将创建该文件。

【讨论】:

  • 是的,它是 apache。我刚刚尝试了你的建议,没有任何区别,仍然得到同样的错误。
  • 好的,我想我现在有了。我在某个时候用所有者“mick”创建了文本文件,我认为我应该能够写入它。当时我还没有意识到它会写成 www-data。现在可以了。感谢您的帮助。
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
  • 2023-04-01
  • 2018-08-12
相关资源
最近更新 更多