PHP会话权限问题

6
我试图初始化一个会话,但是出现了以下错误:
警告:session_start() [function.session-start]:open(/tmp/sess_7af3ee9ec1350680bedcf63833d160bd,O_RDWR) 失败:权限被拒绝(13)
session.path 被设置为 /tmp,权限为 777。
我尝试将 session.path 编辑为 "0;777;/tmp",但是会话文件的权限被创建为只写权限。
我正在使用 PHP 5.2,在 Apache2 和 Ubuntu 9.10 上运行。有什么想法吗?
4个回答

5
请验证 /tmp 文件夹的权限确实为 xx777。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$s = stat('/tmp');
printf('%o', $s[2]);
file_put_contents('/tmp/phptest1234.txt', 'test');
unlink('/tmp/phptest1234.txt');

edit: next try, umask

<?php
echo ' php-umask: ', sprintf('%o', umask()), "\n";
echo ' exec-umask: ', exec('umask'), "\n";

你的脚本返回 44777。 会话文件被写入 /tmp,但权限不正确:php 使用 100366 权限创建会话文件。我可以写入但无法读取。 - Daniel
它返回: php-umask:22 exec-umask:0022 - Daniel
很奇怪。如果你在shell中创建一个文件,比如 ls -la > /tmp/mytestfile.deleteAtAnyTime,它的模式也被设置为100366吗? - VolkerK
不,权限是正确的644,只有会话文件创建时权限错误。也许存在这样的错误: http://bugs.php.net/bug.php?id=31323 - Daniel

2

我也遇到过这个问题。在/etc/sysconfig/httpd文件中有一行设置umask的代码,但是它设置不正确,所以我将其注释掉了:

#umask 644

现在一切都好了。


2

看起来您没有写入 tmp 目录的权限,您需要授予其权限以保存文件。


让我想起了上周遇到的一台机器,是别人设置的,/tmp 的权限是 0770 而不是 1777 或 1666。现在想想,那也是一台 Ubuntu 服务器。 - Powerlord
1
看起来他已经声明了 /tmp 的权限设置为 777。 - Marc W

1

我解决了这个问题,原因是一个第三方库将umask设置为了777,删除该库后问题得到解决。感谢大家的回答。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接