PHP file_exists 对现有文件返回 false

Posted

技术标签:

【中文标题】PHP file_exists 对现有文件返回 false【英文标题】:PHP file_exists returns false with existing files 【发布时间】:2015-09-14 18:12:04 【问题描述】:

我的 php 代码有点问题。我想创建一个具有不同目录的站点。每个目录都有一个名为 pass 的文件(不是 .txt 或其他文件),其中包含目录密码的值。因此,如果 pass-file 不存在,则该组将不存在。但即使该组存在,它仍然说该组不存在,我也无法打开文件,但我可以找到它。这是我的代码:

<?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 数据都是正确的。感谢您的帮助!

【问题讨论】:

尝试始终提供完整路径。 $filename = '/groups/' . $group . '/pass'; 是一个绝对文件路径,因此您本质上是(假设您使用 windows 作为此参考)查看c:/groups/.... 是否存在。 文件的路径应该是绝对的。建议使用方式:define('ROOT', dirname(FILE)); // 定义('ROOT', 'c:\\somedir');然后使用 $filename = ROOT 。 '/组/' 。 $组。 '/通过'; “每个目录都有一个名为 pass(不是 .txt 或其他文件)的文件,其中包含目录密码的值” – 这对于了解您的系统如何工作的每个人来说都是个好消息并且想要破解它——因为现在他们可以通过浏览器简单地请求/groups/foobar/pass……(除非你以某种方式明确阻止了对这些文件的 HTTP 访问?) @CBroe 是的,我知道,我稍后会做 contrahacking,但首先我想让它工作,你看。 【参考方案1】:

我想,那个文件pass 肯定有结尾。 例如。 .php 或 .html 什么的 文件名'/groups/' . $group . '/pass'; 是错误的。

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

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

【讨论】:

以上是关于PHP file_exists 对现有文件返回 false的主要内容,如果未能解决你的问题,请参考以下文章

PHP file_exists() 在某些文件上返回 false

PHP file_exists 返回 false 但文件确实存在

PHP file_exists() 与 htaccess -f 条件的性能

即使我的 linux 上存在文件,php file_exists 也会返回 false

当变量在文件名中时,PHP file_exists 返回 false

PHP - file_exists 还是数组缓存?