PHP的file_exists函数对于存在的文件返回false

3
我有一个PHP代码的小问题。我想创建一个拥有不同目录的网站。每个目录都有一个名为pass(非.txt或其他文件)的文件,其中包含目录密码的值。如果没有pass文件,则该组将不存在。但是,即使该组存在,它仍然会显示该组不存在,我也无法fopen该文件,但我可以找到它。以下是我的代码:
<?php
$name = $_POST['name'];
$group = $_POST['group'];
$pass = $_POST['pass'];
$filename = '/groups/' . $group . '/pass';
if(file_exists($filename)){
    $handle = fopen($filename) or die("can't open file");
    $hoi = fread($handle, filesize($filename));
    fclose($handle);
    if ($pass === $hoi){
        session_start();
        $_SESSION['name'] = $name;
        header('Location: http://www.google.com');
    }
    else{
        echo 'Password is wrong!';
    }
}
else{
    echo 'Group does not exist!';
}
?>

所有的POST数据都是正确的,感谢您的帮助!


请始终尝试给出完整路径。 - Alive to die - Anant
2
$filename = '/groups/' . $group . '/pass'; 是一个绝对文件路径,因此您基本上(假设您在Windows中使用此引用)正在查看 c:/groups/.... 是否存在。 - Jon
2
文件路径应该是绝对的。建议的方法是使用: define('ROOT', dirname(FILE)); // define('ROOT', 'c:\somedir');然后使用 $filename = ROOT . '/groups/' . $group . '/pass'; - sabkaraja
每个目录都有一个名为pass的文件(不是.txt或其他什么),其中包含目录密码的值。这对于了解您的系统如何工作并想要入侵它的所有人来说都是一个好消息,因为现在他们可以通过浏览器简单地请求“/groups/foobar/pass”……(除非您已经以某种方式明确阻止了对这些文件的HTTP访问?) - CBroe
@CBroe 是的,我知道,我以后会进行反黑客处理,但首先我想让它工作起来,你看到了。 - Jochem Groot Roessink
使用像 .php 或 .html 这样的扩展名。如果没有这个,你将不总是得到错误的结果。 - Manish
1个回答

0

我认为文件pass必须有一个结尾,例如.php或.html等。文件名'/groups/'.$group.'/pass';是错误的。

PHP函数命名为file_exist(),文件必须有结尾!

如果它是文件夹,它有时会在末尾加上斜杠。但它也可以是文件。使用.htaccess重定向,在index.html或index.php上可能会在文件末尾加上斜杠。


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