如何使用和读取 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']
开头时始终使用完整路径
我希望我的 .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']