【发布时间】:2012-01-11 21:35:27
【问题描述】:
我正在尝试将 PHP 会话变量放入 Perl CGI 脚本。我在下面有以下 perl 代码,它似乎可以让我获得 PHPSESSID,然后我将其传递给 PHP::Session 以及存储会话文件的目录。
my $cookie_name='PHPSESSID';
my $sess_query = new CGI;
my $session_name = $sess_query->cookie($cookie_name);
my $session = PHP::Session->new($session_name,{save_path =>'/var/lib/php/session/'});
当我收到权限被拒绝错误时,我的问题发生了
[Fri Dec 2 16:52:44 2011] upload.cgi: /var/lib/php/session/sess_417ar7qsh4sh853gqs3bj454i5: Permission denied at /var/www/html/xxx/upload.cgi line 22, referer:. ..
第 22 行是上面代码中的PHP::Session->new 行。
我的 httpd 服务器以 apache 用户身份运行,cgi 脚本由 apache 拥有,/var/lib/php/session/ 中的所有 sesssion 文件也是如此,所以我想知道为什么 CGI 脚本不能读取会话文件。
我在网上读到有人使用 LWP 作为解决方法,但这不是我的偏好,因为我觉得这对我缺少的权限很愚蠢。
更新:添加信息 - 这里是会话文件 - 你可以看到会话文件存在并且归 apache 所有,但 CGI perl 脚本无法读取这些:
-rw-------. 1 apache apache 0 Dec 2 16:58 /var/lib/php/session/sess_417ar7qsh4sh853gqs3bj454i5
-rw-------. 1 apache apache 126 Dec 2 16:58 /var/lib/php/session/sess_f39ot5ul3bu55uu7d1rg3aqq02
【问题讨论】:
-
/var/lib/php/session/和/var/lib/php/session/sess_417ar7qsh4sh853gqs3bj454i5的权限是什么?做一个ls -l找出答案。另外,您的 perl CGI 以什么用户/组的身份运行?请记住,apache 配置可能会让您的 CGI 脚本以不同的用户身份运行。 -
嗯...我可以验证 httpd 是否以 apache 用户身份运行,但是如果配置文件中的 CGI 脚本以其他用户身份运行,我在哪里可以找到?
-
找出 CGI 运行的用户/组的最简单方法可能是 perl 变量
$<、$>、$(和$)。只需从您的 CGI 打印出来。尖括号是真实有效的用户id;括号是真实有效的组 ID。您必须查找 ID。 -
我肯定没有将它设置为不同的用户,只是对 CGI 或 cgi 或 cgi-bin 的 conf 文件进行了 grep 处理,没有任何异常......
-
@Ross:只需
print "Content-type: text/plain\n\n$< $> $( $)\n";无需复制所有变量。或任何复杂性。
标签: php perl session permissions cgi