基本上,我有一个.htaccess
文件,其中php_value session.auto_start
设置为1
。因此,我的会话将在任何文件中开始。
但是,现在我的/functions
文件夹中有一个脚本,但它给出了一个关于/tmp
权限的错误,导致"Failed to write session data"
,,尽管它不使用,启动或对会话执行任何操作。
然而,这会产生一个错误,对我来说,它似乎找不到/tmp
文件夹,我确实有这个文件夹。直接在我的根文件夹(/
)中的文件没有这个问题
我还尝试将/tmp
的权限设置为777
,但没有成功。
提前感谢
我得到的错误
Warning: Unknown: open(/tmp/sess_cfed7db100fd58b62eaca2a519ebaf7a, O_RDWR) failed: Permission denied (13) in Unknown on line 0
Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0
脚本本身:
<?php
define ('INCLUDE_CHECK',true);
require('connect.php'); //This file doesn't use any sessions as well
if(isset($_POST['signupemail'])){
$email = mysqli_real_escape_string($link, $_POST['signupemail']);
$thearray = mysqli_fetch_array(mysqli_query($link, "SELECT COUNT(*) FROM `users` WHERE email='"".$email."'""));
if($thearray[0] > 0){
echo '"This emailaddress is already in use"';
exit;
}
echo "true";
} else if(isset($_POST['uname'])){
if(!preg_match('/^[a-zA-Z0-9_-]{3,16}$/ ',$_POST['uname'])){
echo '"<small>Please only use alphanumeric characters, underscores and hyphens</small>"';
exit;
}
$uname = mysqli_real_escape_string($link, $_POST['uname']);
$thearray = mysqli_fetch_array(mysqli_query($link, "SELECT COUNT(*) FROM `users` WHERE uname='"".$uname."'""));
$forbiddennames = array(1 => 'super-user','superuser', 'root', 'admin', 'administrator', 'system', 'website', 'site', 'owner', 'manager', 'founder','moderator');
if(in_array(strtolower($_POST['uname']), $forbiddennames)) {
echo '"'.$_POST['uname'].' is a forbidden username"';
exit;
}
if($thearray[0] > 0){
echo '"This username is already in use, please choose another"';
exit;
}
echo "true";
}
?>
当我只是手动浏览到我的脚本时,我会收到错误,所以没有设置任何$_POST
参数。我使用这个脚本来验证一个人的电子邮件和/或密码,当检查时,它会停止,不知道该如何处理结果(由AJAX
获得)。
我记得一些php.ini设置,它阻止访问不在Web服务器目录树中的文件。不过,我不知道这是否适用于php内部生成的文件。
如果您在Red Hat Enterprise linux或CentOs或Scientific linux等衍生平台上运行,selinux也可能存在问题。如果将selinux设置为permission(sudo setenforce-Permission),请检查问题是否消失。如果这"解决"了问题,请三思而后行,将selinux保留在许可模式下,特别是如果您的服务器可以从互联网上访问,请更好地了解selinux和重新标记。
Uhm,结果发现它与浏览器有关。当我在FireFox中测试时,没有问题。在谷歌浏览器,大问题。
我不知道它是什么,但在从我的网站上删除缓存、cookie和所有内容后,它运行得很好。看起来像是在寻找一个旧的会话。