如何使用和读取 PHP 中不同文件夹中的 php 文件?

How to use and read php file inside different folder in PHP ?

我希望我的 .php 文件在文件夹内分类。 我有一个包含文件夹和 php 文件的根目录,如下所示。

core 
   initial.php // database connection
css
   style.css
js 
   js.css
apply
   index.php
   apply.php
templates
   head.php
   footer.php
index.php

我的根 index.php,我只是像往常一样包含文件。注意* - head.php 和 footer.php 包含 HTML 文件。

<?php
    require_once 'core/initial.php';
    include 'templates/head.php';

    echo '<a href='apply/index.php'>Apply</a>';    

    include 'templates/footer.php';
?>

但我的问题是,我在 apply 文件夹中的 index.php 文件无法调用 initial.php。

警告:require_once(core/initial.php):无法打开流:C:\xampp\htdocs\movement\production\index.php 中没有这样的文件或目录第 2 行

Fatal error: require_once(): Failed opening required 'core/initial.php' (include_path='\xampp\php\PEAR') in root\test\apply\index.php on line 2

我的apply/index.php代码

<?php
    require_once '../core/initial.php';

    include '../templates/overall/header.php';

    // PHP code here

    include '../templates/overall/footer.php';

原因是我不希望我的 .php 文件都位于根目录中。除了 index.php 之外,我希望每个 php 文件都在自己的文件夹中。

我该怎么做?有人可以帮我解决这个问题吗?

谢谢。

为什么不总是 link 基于根,例如:

    require_once '/core/initial.php';
    include '/templates/head.php';

相对路径不适用于 Windows...在 linux 上可以。

最好是在名为defines.php的根文件中定义一个常量,然后在index.php中用require_once调用它。

defines.php

DEFINE('_APP_ROOT_','c:\xampp\...');

之后,您将在所有 require 和 includes 中使用此绝对路径:

apply/index.php

require_once _APP_ROOT_ . 'core/initial.php';
include      _APP_ROOT_ . 'templates/overall/header.php';

您可以在此处找到更多信息:PHP - include() or require() with relative paths won't work on windows, even when appending __DIR__

你试过这样吗?

require_once $_SERVER['DOCUMENT_ROOT'] . '/core/initial.php';
include $_SERVER['DOCUMENT_ROOT'] . '/templates/head.php';

initial.php 或其他帮助文件中,执行:

/**  List of all dirs you wish to include from, relative to the document root  */
const INCLUDE_DIRS = [
  '/',
  '/core/',
  '/apply/',
  '/templates/'
];

function getPath($filename){
  $rootDir = $_SERVER['DOCUMENT_ROOT'];
  $path = null;

  foreach(INCLUDE_DIRS as $dir){
    if(file_exists($path =$rootDir . $dir . $filename)) return $path;
  }      
  throw new Exception("Could not find $filename in any of the INCLUDE_DIRS directories");
}

现在你只需要获得一个包含权;保存函数的文件。始终使用完整路径包含它,以便它可以在任何地方使用:

require_once $_SERVER['DOCUMENT_ROOT'] . '/core/initial.php'

您可以走得更远,使用 auto_prepend_file 指令告诉 PHP 始终在 运行 常规脚本之前执行该文件。这是一个具有上述功能的好文件,PHP 会自动为您包含它。

无论如何,包含getPath()的文件后,您再也不用担心使用正确的路径了。只需确保所有包含目录都列在 INCLUDE_DIRS 常量和 include/require 您的文件中,如下所示:

require_once getPath('footer.php'); //getPath will scan INCLUDE_DIRS and find it

请注意此方法的一个重要限制 是,如果您有两个同名文件,它将不起作用,因为找到的第一个文件将被包括在内。在这种情况下,请确保在 including/requiring 以 $_SERVER['DOCUMENT_ROOT']

开头时始终使用完整路径