PHP file_exists函数总是返回false


PHP file_exists function is always returning false

用于检查文件是否存在的代码总是返回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

所以你用绝对路径检查,但你想用相对路径检查,所以你必须在你的第一个斜杠之前放一个点,使它与你的当前路径相对,比如:

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

我真的不确定您最终要完成什么,但file_exists()通常会检查Web服务器运行所在机器的根文件系统中的绝对路径,而您似乎会尝试检查相对于Web服务器的根目录(根文件系统的子目录)的路径。

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

所以类似的东西

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

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

此外,要小心处理结果,尤其是在不受信任的环境中。您应该检查参数p是否仅由文件名的有效字符组成(尤其是没有句点和斜杠)。