PHP file_exists函数总是返回false

时间:2015-04-05 16:16:27

标签: php

此代码用于检查文件是否存在,始终返回false;

<?php
if (isset($_GET['p'])) {
    $page = $_GET['p'];
}
else {
    $page = "home";
}
$JKSP = '/Pages/JKS-' . $page . '.php';
if (!file_exists($JKSP)) {
    $JKSP = '/Pages/JKS-404.php';
}
?>

没有if(!file_ex .. section。

,它可以正常工作

如何让这段代码生效?

此代码的目录是 /功能/ JksCreations / 页面的目录是 / featured / JksCreations / Pages / JKS- PAGE .php

2 个答案:

答案 0 :(得分:0)

我不确定你到底想要完成什么,但是file_exists()通常检查运行web服务器的机器的根文件系统中的绝对路径,而你似乎试图检查相对于webserver的根直接路径的路径(这是根文件系统的子目录)。

您可以使用预定义变量$_SERVER['DOCUMENT_ROOT']在PHP中访问此子目录。

类似

if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/featured/JksCreations" . $JKSP)) {
    $JKSP = '/Pages/JKS-404.php';
}

可能适用于您尝试执行的操作,但由于缺少权限,它可能仍会失败。

另外,请注意您对结果的处理方式,尤其是在不受信任的环境中。您应该检查参数p是否只包含文件名的有效字符(尤其是没有点和斜线)。

答案 1 :(得分:0)

所以你做的是用绝对路径检查,但是你想检查一个相对路径,所以你必须在你的第一个斜线前加一个点从当前路径开始相对于此:

$JKSP = './Pages/JKS-' . $page . '.php';
       //^ See here