当我调用session_start()时,如何修复Permission错误?

时间:2011-01-03 14:08:31

标签: php session permissions warnings

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

  

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

     

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

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

15 个答案:

答案 0 :(得分:25)

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

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

答案 1 :(得分:9)

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

您可以使用session_save_path

执行此操作

答案 2 :(得分:6)

如果您有SSH访问权限,以下是如何更正权限和所有权

sudo chown -R NAME_OF_USER /tmp

由运行php的用户替换NAME_OF_USER。你可以通过简单地将这些行放在php文件中找到它:

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

答案 3 :(得分:3)

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

答案 4 :(得分:2)

我刚刚遇到了一个与我的PHP脚本完全相同的问题而且我就像是什么让我打破'因为它在前一天完美运行并且我从我自己的本地Puppy Linux机器运行它所以它不是甚至是主人或任何东西。

在此之前我唯一想做的就是尝试让Java在Web浏览器中运行,所以我可以设法让Java工作但是打破了PHP - oops!

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

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

我注意到权限设置为Owner - Read,Write,Exec,但Group和World仅设置为Read和Exec而不是Write。我在Group和World中写了一个勾号,现在PHP再次正常工作。

我不知道在什么时候tmp的权限必须已经更改,但是要使用PHP,必须将其设置为具有写权限。

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

  1. 我用PHP填写了一些会话变量
  2. 当会话仍处于活动状态时,我在主机上从PHP 5.4更改为5.3。
  3. 重新加载页面会出现上述错误。
  4. 再次将PHP版本重置为5.4。
  5. used session_unset();和session_destroy();清理当前会话。
  6. 将PHP版本更改回5.3。
  7. 现在再次运作。
  8. 结论:出于不相关的原因,我不得不更改我的PHP版本,并且在使用会话切换时,会话被破坏。

答案 7 :(得分:2)

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

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

希望这有助于其他人!

答案 8 :(得分:2)

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

要解决此问题,我会删除该文件并重新启动php-fpm。

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

现在一切正常。

答案 9 :(得分:1)

如果:

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

然后您会在以下情况下看到此错误Apache PHP进程尝试在会话文件上运行垃圾收集。

修正:

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

答案 10 :(得分:1)

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

open /etc/apache2/

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

User  _www
Group _www

这是因为您希望您的服务器拥有系统目录的权限,尤其是您想要更改User,或者您可以将Group保留为staff或{{1 }}

答案 11 :(得分:1)

添加以下行

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

之前

session_start(); 

答案 12 :(得分:0)

对我来说问题似乎是一个WHM错误! 我有一堆添加域名,所有工作正常,但有一个子域,它会带来这个错误。

奇怪的是,如果我使用主域名的完整网址,它可以正常工作:

main-domain.com/my.subdomain.com

如果我直接使用子域,则会出现“Permission denied(13)”:

my.subdomain.com

事情是所有插件域的根目录是:

/家庭/ XX /

但对于我的子域名,不知道原因,根是:(我不应该访问该目录)

/

所以它确实试图达到:/ tmp而不是/ home / xx / tmp

哪些也存在,但没有正确的权限

澄清这是整个路径的例子:

/首页/我的账户/的public_html

/首页/我的账户/ tmp目录

的/ tmp

我使用的解决方法是:

  

session_save_path( '/家庭/我的账户的/ tmp');

     

在session_start();

答案 13 :(得分:0)

我最初遇到这个问题是因为nginx拥有/ tmp位置而且php-fpm正在&#39; apache&#39;用户和组由于www.conf。我换掉了该文件中的用户/组,然后它运行正常。您可以查看<?php echo exec('whoami'); ?>进行验证。

答案 14 :(得分:0)

使用PHP 5.6我已经使用session_save_path()指向域结构中的目录。它工作正常,直到我升级到PHP 7.0,此时我收到了指出的错误。在PHP.net我发现了一些评论,表明指定直接路径并不总是有效,所以我使用了他们的建议。

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

工作得很好。请记住将/../session更改为实际会话目录的相对位置。