PHP 要求在根文件夹中不起作用
PHP require does not work in root folder
当用户单击表单上的提交按钮时,我正在使用它来请求文件。此代码位于 blog.php。当我在文件夹 /includes/ 中有此文件时,代码可以完美运行,但我希望此文件位于根文件夹中。当我将它添加到根文件夹中时,出现此错误:
Warning: require(../includes/addbloguser.php): failed to open stream:
No such file or directory in C:\xampp\htdocs\Pentaslash\blog.php on
line 27
Fatal error: require(): Failed opening required
'../includes/addbloguser.php' (include_path='.;C:\xampp\php\PEAR') in
C:\xampp\htdocs\test\blog.php on line 27
<?php
if(isset($_POST["submit"])){
require '../includes/addbloguser.php';
}
?>
根据你的评论,不应该是:
require './addbloguser.php';
尝试使用
require __DIR__ . '/addbloguser.php';
或
require dirname(__FILE__) . '/addbloguser.php';
这样您可以获得更好的错误消息并查看缺少的内容。
这是使用相对文件路径引起的问题。当文件 blog.php
位于文件夹 includes
中时,您的相对文件路径有效,因为使用 ../
您将向上移动一个目录(到您的根目录)然后返回 includes
。但是由于您将文件向上移动了一个目录(到您的根目录),所以您将 ../
向上一个目录,在您的根目录之外,然后尝试进入文件夹 includes
,但是文件夹在你的根目录上面的目录中不存在(好吧,如果你幸运的话它存在,但是文件不存在或者它存在但错误的文件)。
为防止这种情况,您应该始终使用绝对文件路径,这样您就可以将 blog.php
移动到任何地方,只要您的文件 addbloguser.php
保持在同一位置。
获取项目绝对文件路径的一种简单方法是在项目根目录的全局文件中定义一个计算结果为 dirname(__FILE__))
的常量。这样一来,您始终可以使用常量来处理文件,并防止在更改某些内容时修改文件以更正相对文件路径。
例如global.php
在你的根目录下,那你就写这个
define('IN_DIR', dirname(__FILE__)); //__FILE__ is a magic constant and includes the absolute filepath to the current file -> global.php
如果你现在在 blog.php
中包含所述文件 global.php
(或相反),你可以为你的文件路径使用定义的常量,它看起来像这样
require IN_DIR.'/path/to/file.php'
在这种情况下会是
require IN_DIR.'/includes/addbloguser.php'
当用户单击表单上的提交按钮时,我正在使用它来请求文件。此代码位于 blog.php。当我在文件夹 /includes/ 中有此文件时,代码可以完美运行,但我希望此文件位于根文件夹中。当我将它添加到根文件夹中时,出现此错误:
Warning: require(../includes/addbloguser.php): failed to open stream: No such file or directory in C:\xampp\htdocs\Pentaslash\blog.php on line 27
Fatal error: require(): Failed opening required '../includes/addbloguser.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\test\blog.php on line 27
<?php
if(isset($_POST["submit"])){
require '../includes/addbloguser.php';
}
?>
根据你的评论,不应该是:
require './addbloguser.php';
尝试使用
require __DIR__ . '/addbloguser.php';
或
require dirname(__FILE__) . '/addbloguser.php';
这样您可以获得更好的错误消息并查看缺少的内容。
这是使用相对文件路径引起的问题。当文件 blog.php
位于文件夹 includes
中时,您的相对文件路径有效,因为使用 ../
您将向上移动一个目录(到您的根目录)然后返回 includes
。但是由于您将文件向上移动了一个目录(到您的根目录),所以您将 ../
向上一个目录,在您的根目录之外,然后尝试进入文件夹 includes
,但是文件夹在你的根目录上面的目录中不存在(好吧,如果你幸运的话它存在,但是文件不存在或者它存在但错误的文件)。
为防止这种情况,您应该始终使用绝对文件路径,这样您就可以将 blog.php
移动到任何地方,只要您的文件 addbloguser.php
保持在同一位置。
获取项目绝对文件路径的一种简单方法是在项目根目录的全局文件中定义一个计算结果为 dirname(__FILE__))
的常量。这样一来,您始终可以使用常量来处理文件,并防止在更改某些内容时修改文件以更正相对文件路径。
例如global.php
在你的根目录下,那你就写这个
define('IN_DIR', dirname(__FILE__)); //__FILE__ is a magic constant and includes the absolute filepath to the current file -> global.php
如果你现在在 blog.php
中包含所述文件 global.php
(或相反),你可以为你的文件路径使用定义的常量,它看起来像这样
require IN_DIR.'/path/to/file.php'
在这种情况下会是
require IN_DIR.'/includes/addbloguser.php'