PHP文件_存在并返回false

PHP文件_存在并返回false,php,url-routing,file-exists,Php,Url Routing,File Exists,我正在尝试为我的项目编写我自己的小MVC框架,我可以随便看看,然后快速启动并运行,主要是为了学习。每个请求都通过index.php路由,其中包含以下代码: <?php // Run application require 'application/app.php'; $app = new App(); $app->run(); 因此,通过从app.php中使用如果(文件u存在('controllers/'.$controller.'.php')),它应该能够找到控制器/Pages

我正在尝试为我的项目编写我自己的小MVC框架,我可以随便看看,然后快速启动并运行,主要是为了学习。每个请求都通过
index.php
路由,其中包含以下代码:

<?php

// Run application
require 'application/app.php';
$app = new App();
$app->run();
因此,通过从
app.php
中使用
如果(文件u存在('controllers/'.$controller.'.php'))
,它应该能够找到
控制器/Pages.php
,但它不能


有人知道我如何解决这个问题吗?

您正在使用相对路径作为包含项。随着应用程序的增长,它将成为一场噩梦

我建议你

  • 编写一个autoloader类,处理包含文件的问题。使用一些映射机制将名称空间/类名转换为路径
  • 使用绝对路径。请参阅下面的调整代码
例如:

// Run application
define('ROOT', dirname(__FILE__) );
require ROOT . '/application/app.php';
$app = new App();
$app->run();
后来:

// Check if controller exists
if(file_exists(ROOT . '/application/controllers/' . $controller . '.php')) {
    // Include and instantiate controller
    require_once ROOT. '/application/controllers/' . $controller . '.php';
    $controller = new $controller . 'Controller';
/application
    /controllers
        Pages.php
    /models
    /views
    app.php
    routes.php
// Run application
define('ROOT', dirname(__FILE__) );
require ROOT . '/application/app.php';
$app = new App();
$app->run();
// Check if controller exists
if(file_exists(ROOT . '/application/controllers/' . $controller . '.php')) {
    // Include and instantiate controller
    require_once ROOT. '/application/controllers/' . $controller . '.php';
    $controller = new $controller . 'Controller';