【问题标题】:PHP: "failed to open stream: Permission denied"PHP:“无法打开流:权限被拒绝”
【发布时间】:2015-11-15 04:02:25
【问题描述】:

当我尝试通过某个函数访问任何目录或文件时,我在服务器上得到了一些有趣的结果。我已将所有文件和目录权限设置为 777,并将内容所有者更改为 Apache,但我仍然收到错误消息.代码:
move_uploaded_file($_FILES['file']['tmp_name'], '/var/www/html/fileContent_Site/userData/'.$_SESSION['username'].DIRECTORY_SEPARATOR.$_FILES['file']['name']);
要么 file_put_contents('userData/userData.txt', $result,FILE_APPEND); mkdir("userData/".$register['username']);

对于“move_uploaded_file()”,我得到:

move_uploaded_file(/var/www/php/Site/userData/radi/110729.png):无法打开流:/var/www/php/Site/upload.php 中的权限被拒绝

move_uploaded_file():无法将“/tmp/phpUFvMcn”移动到/var/www/php/Site/upload.php中的“/var/www/php/Site/userData/radi/110729.png”

对于 'file_put_content()' 和 'mkdir()'

file_put_contents(userData/userData.txt):无法打开流:/var/www/php/Site/register.php 中的权限被拒绝

mkdir():/var/www/php/Site/register.php 中的权限被拒绝

【问题讨论】:

  • 我认为这是一个所有者错误。 PHP 所有者是守护进程,所以请您检查您的服务器配置

标签: php file-permissions mkdir directory-permissions file-put-contents


【解决方案1】:
  1. 检查运行 PHP 的所有者。要检查 - 只需在 PHP 文件中的“file_put_contents”附近添加这些字符串

    echo "当前用户:".get_current_user();

    echo "脚本在用户下执行:".exec('whoami');

  2. 如果您看到当前用户和“脚本用户”之间的区别,那么您就发现了问题。

输出示例:

current user: root
script was executed under user: www-data

只需将适当的用户设置为您要从 PHP 脚本写入的 PHP 文件目录/目录: 在 Linux 终端执行:

chown -R www-data:www-data /path/to/the/folder

请注意,“www-data”用户仅作为示例。您应该使用从“脚本在用户下执行”输出中获得的用户。

附注: 要检查文件夹所有者,你可以使用这个 linux 命令:

ls -ltr

附: 检查您的文件夹是否具有正确的访问权限:755 文件夹php文件应具有“644”访问权限。

要检查权限,请使用与检查所有者相同的命令:

ls -ltr

你会看到类似的东西:

drwxr-xr-x  10 www-data www-data 4096 Aug  5 15:18 api

其中“drwxr-xr-x”是访问权限。谷歌它,以获取更多信息。

【讨论】:

    【解决方案2】:

    打开 http.conf(在 /opt/lampp/etc/httpd.conf 中)文件。

    编辑此部分:

    <IfModule unixd_module>
    #
    # If you wish httpd to run as a different user or group, you must run
    # httpd as root initially and it will switch.  
    #
    # User/Group: The name (or #number) of the user/group to run httpd as.
    # It is usually good practice to create a dedicated user and group for
    # running httpd, as with most system services.
    #
    User hostname
    Group hostname
    </IfModule>
    

    看看,是否可行。

    【讨论】:

    • 当我更改运行 .httpd 的用户时,即使使用 sudoers 文件中的用户,我也会开始收到更多错误。
    • 您的项目的用户名和组名是什么?是 www 数据吗?
    • 没有项目的路径是 /var/www/php/site 。php 中所有文件和文件夹的所有者是我的用户,组是 apache,但即使我 'chown -R apache: apache php' 仍然没有发生同样的错误
    【解决方案3】:

    使用

    $_SERVER["DOCUMENT_ROOT"]."/myFolder/path to upload folder". 
    

    检查一次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-14
      • 2014-10-28
      • 2016-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多