如何检查文件是否存在,如果未找到则返回HTTP 404

时间:2017-02-04 21:44:54

标签: php http

我有文件夹(索引,注册,登录等)。我想检查给定GET请求的文件是否存在。示例 - localhost /?page =(页面)。我知道如何制作这个,但如果文件夹中不存在页面,我想制作404错误页面。

如果我在文件夹页面文件register.php并设置if($_GET['page'] = 'register') include('pages/register'),如果文件不在文件夹中,则返回HTTP 404

3 个答案:

答案 0 :(得分:0)

如果您使用的是带有apache或nginx的服务器,则应在其中进行设置。 如果您只是测试并且想要了解如何手动完成它,您可以尝试捕获需求,如下所示:

try{
  require('pages/' . $_GET["page"]);
}catch(Exception $e){
  require('pages/404.html');
}

答案 1 :(得分:0)

编辑1

由于您已经要求您只需要文件名,因此只需添加

即可
$page = isset($_GET['page']) ? $_GET['page'] : '';
$page = pathinfo($page, PATHINFO_FILENAME);
$dir  = '/your-files-directory';
$files = scandir($dir);

if( !in_array($page, $files)){
    include('404.php');
    exit();
} 


include("/your-file-director/{$page}.php");

<强>解决方案

$page = $_GET['page'];
$dir    = '/your-files-directory';
$files = scandir($dir);

if( !in_array($page, $files)){
    include('404.php');
    exit();
} 


include("/your-file-director/{$page}.php");

<强>问题

  1. 这不安全。为什么?不要相信用户输入..这可能会导致LFI。几乎所有种类的LFI风味&#34;。 LFI OWASP PHP
  2. 这是不可管理的。为什么?因为那样你将继续为每个页面添加一个文件,每个文件都有你的应用程序流的完整架构。
  3. 现在只有两个原因..干杯:)

答案 2 :(得分:0)

您可以使用函数scandir()来实现

$getpage = (string) $_GET['page'];
$existingFiles = scandir('pages');

if(isset($existingFiles[$getpage])){
   include('pages/'.$getpage);
}
else{
    echo '404';
    header('HTTP/1.0 404 Not Found', true, 404);
}