【问题标题】:How can I fix the Permission error when I call session_start()?调用 session_start() 时如何修复权限错误?
【发布时间】:2011-06-02 20:59:06
【问题描述】:

当我将脚本上传到服务器时出现此错误

警告:未知: 打开(/tmp/sess_58f54ee6a828f04116c2ed97664497b2, O_RDWR) 失败:权限被拒绝 (13) 在第 0 行的未知中

警告:未知:写入失败 会话数据(文件)。请验证 的当前设置 session.save_path 是正确的 (/tmp) 在 第0行未知

当我调用session_start(); 时出现错误 虽然我将 /tmp 文件夹的权限设置为 777 。

【问题讨论】:

    标签: php session permissions warnings


    【解决方案1】:

    在我的情况下,问题是 SELINUX 不允许这样做。

    获取有关如何解决此问题的建议的有用命令:

    sealert -a /var/log/audit/audit.log
    

    如果您想排除 SELINUX,请尝试禁用它片刻。如果这样可以解决问题,那就是问题所在。

    【讨论】:

      【解决方案2】:

      此外,假设您有权访问此功能,您可能希望使用ini_set('session.save_path', '/dir/here');。建议的其他方式都有效。

      【讨论】:

        【解决方案3】:

        我有同样的权限问题,但是在 /var/lib/php/session/ 上。

        为了修复它,我删除了文件并重新启动 php-fpm。

        rm -rf /var/lib/php/session/sess_p930fh0ejjkeeiaes3l4395q96
        sudo service php5.6-fpm restart
        

        现在一切正常。

        【讨论】:

          【解决方案4】:

          使用 PHP 5.6 我已经使用 session_save_path() 指向域结构中的目录。在我升级到 PHP 7.0 之前它运行良好,当时我收到了注意到的错误。在PHP.net,我发现几个 cmets 表明分配直接路径并不总是有效,所以我采用了他们的建议。

          session_save_path(realpath(dirname($_SERVER['DOCUMENT_ROOT']) . '/../session'));

          完美运行。请记住将/../session 更改为实际会话目录的相对位置。

          【讨论】:

            【解决方案5】:

            我最初遇到这个问题是因为 nginx 拥有 /tmp 位置,并且由于 www.conf,php-fpm 在“apache”用户和组下运行。我换出了该文件中的用户/组,然后它工作正常。您可能需要检查<?php echo exec('whoami'); ?> 进行验证。

            【讨论】:

              【解决方案6】:

              我意识到这是一个旧帖子,但是我刚刚遇到了这个问题,并找到了一个简单的解决方案。

              对我来说,问题出在我在本地部署的一个网站上。我没有尝试使用其他浏览器访问这些网站,但每次我尝试通过 Chrome 访问该网站时都会发生这种情况。我决定进入 Chrome 开发者工具,在应用程序选项卡下——然后点击“清除存储”。瞧——一切又像魔术一样运转了。

              希望这对其他人有帮助!

              【讨论】:

                【解决方案7】:

                对我来说,问题似乎是 WHM 错误! 我有一堆添加域并且一切正常,但是使用子域会带来此错误。

                奇怪的事情,但如果我在主域中使用完整的 URL,它就可以正常工作:

                main-domain.com/my.subdomain.com

                如果我直接使用子域,它会带来“Permission denied (13)”:

                my.subdomain.com

                事情是所有插件域根是:

                /home/xx/

                但是对于我的子域,不知道为什么,根是:(我不应该访问那个目录)

                /

                所以它真的试图到达:/tmp 而不是 /home/xx/tmp

                也存在但没有正确的权限

                为了澄清这是整个路径的示例:

                /home/my-account/public_html

                /home/my-account/tmp

                /tmp

                我使用的解决方法是:

                session_save_path('/home/my-account/tmp');

                session_start();

                【讨论】:

                  【解决方案8】:

                  如果您使用Apache 网络服务器,快速解决方法是转到您的命令行并输入:

                  open /etc/apache2/
                  

                  然后从打开的窗口中,打开名为httpd.conf 的文件并搜索UserGroup 将这两行更改为:

                  User  _www
                  Group _www
                  

                  这是因为您希望您的服务器有权访问您的系统目录,尤其是您想更改User,或者您可以将Group 保留为staffadmin

                  【讨论】:

                  • 它适用于我的 macbook!谢谢! sudo chown -R _www:_www 文件夹
                  【解决方案9】:

                  如果:

                  • session.gc_probability > 0
                  • 会话文件由不同的用户(例如 root 和 apache)创建。
                  • 会话文件都存储在同一个地方(例如/var/lib/php/session)

                  然后你会看到这个错误,例如Apache PHP 进程尝试对会话文件运行垃圾收集。

                  修复:

                  1. 重新配置 PHP,使 gc_probability 为 0,并有一个 cron 作业删除旧/过时的文件。
                  2. 让每个不同的用户将他们的会话文件保存在不同的位置(session_save_path() 等)。

                  【讨论】:

                    【解决方案10】:

                    添加以下行

                    ini_set('session.save_path', getcwd() . '/tmp');
                    

                    之前

                    session_start(); 
                    

                    【讨论】:

                      【解决方案11】:

                      如果您有 SSH 访问权限,这里是更正权限和所有权的方法

                      sudo chown -R NAME_OF_USER /tmp
                      

                      将 NAME_OF_USER 替换为运行 php 的用户。您只需将这些行放在一个 php 文件中即可找到它:

                      $processUser = posix_getpwuid(posix_geteuid());
                      print $processUser['name'];
                      exit;
                      

                      【讨论】:

                        【解决方案12】:

                        我在以下情况下遇到了这个问题:

                        1. 我用 PHP 填充了一些会话变量
                        2. 当会话仍处于活动状态时,我在主机上从 PHP 5.4 更改为 5.3。
                        3. 重新加载页面时出现错误,如上所述。
                        4. 再次将 PHP 版本重置为 5.4。
                        5. 已使用 session_unset();和 session_destroy();清理当前会话。
                        6. 将 PHP 版本改回 5.3。
                        7. 现在它又可以工作了。

                        结论:由于一个不相关的原因,我不得不更改我的 PHP 版本,并且在使用活动会话进行切换时,会话被破坏了。

                        【讨论】:

                          【解决方案13】:

                          检查您没有遇到磁盘空间问题。如果所有权限都正确(并且 777 应该为您执行此操作),那么如果没有足够的空间写入磁盘,您可能仍然会收到此错误(对于某些版本的 PHP 和 Apache)。

                          【讨论】:

                            【解决方案14】:

                            我的一个 PHP 脚本也遇到了完全相同的问题,我就像是我破坏了什么,因为它在前一天完美运行,我在我自己的本地 Puppy Linux 机器上运行它,所以它不是甚至是主机或任何东西。

                            在那之前我唯一做的就是试图让 Java 在 Web 浏览器中工作,所以我如何设法让 Java 工作但破坏了 PHP - 哎呀!

                            无论如何,我确实记得,在尝试让 Java 工作时,我删除了 /tmp 文件夹的内容以清除任何可能导致问题的内容(实际上,Java 原来我使用的是旧插件 oij新的火狐)

                            为了解决这个问题,我打开了 Rox 文件管理器,进入 / 文件夹并右键单击 tmp folder -> Mount Point 'tmp' and clicked properties

                            我注意到权限设置为所有者 - 读取、写入、执行,但组和世界仅设置为读取和执行,而不是写入。我在 Write for Group 和 World 中打勾,现在 PHP 又可以正常工作了。

                            我不知道 tmp 的权限在什么时候必须更改,但 PHP 使用它们必须设置为具有写入权限。

                            【讨论】:

                              【解决方案15】:

                              您需要更改您的 session.save_path php.ini 指令

                              你可以使用session_save_path来做到这一点

                              【讨论】:

                                【解决方案16】:

                                更改可以写入数据的会话路径或联系服务器管理员了解 /tmp 问题

                                http://php.net/manual/en/function.session-save-path.php

                                【讨论】:

                                  猜你喜欢
                                  • 2013-02-24
                                  • 1970-01-01
                                  • 2021-03-11
                                  • 1970-01-01
                                  • 2018-08-17
                                  • 2016-06-27
                                  • 2015-02-02
                                  • 1970-01-01
                                  • 2016-12-13
                                  相关资源
                                  最近更新 更多