我买了一台新的笔记本电脑,安装了一个新版本的XAMPP。我转移了我正在研究的一个系统,它在这台计算机上不能正常运行。
我认识到的第一个问题是它不包括相对于包含它的文件的位置的文件。我有一个config.php
文件在includes/
目录以及我的include.php
文件。在include.php
文件中,我必须键入require 'includes/config.php';
,即使config.php
与include.php
在同一文件夹中。在我的另一台电脑上,我只需要执行require 'config.php';
。
也因为包含的文件没有加载我正在查看的主文件,变量和常量没有定义,所以它似乎是自动定义它们?
Notice: Use of undefined constant DB_HOST - assumed 'DB_HOST' in C:'xampp'htdocs'Xion'includes'include.php on line 6
这是新版本PHP上的配置问题吗?
通常PHP核心设置include_path
也包含当前路径:它由.
(点)表示,添加到包含路径列表中:
include_path=".;c:'php'includes"
引用文档:
在包含路径中使用
.
允许相对包含当前目录。但是,显式使用它会更有效包含'./file'
,而不是让PHP总是检查当前目录
是的,任何barename(不带引号的字符串)都将被PHP作为常量名处理。如果没有定义这个常量(就像您的例子一样),PHP将把它转换为字符串(不过会发出一个通知)。
通知错误是因为您正在访问像$someArray[DB_HOST]这样的数组。数组键应该像$someArray['DB_HOST']那样用引号括起来。没有引号是常量,键是字符串,而不是常量。
包含路径问题也是相当标准的。如果您有以下文件:
index.php
includes/config.php
includes/include.php
如果您加载index.php并包含文件includes/include.php
,则必须键入完整路径includes/include.php
。如果您想在include.php
中包含includes/config.php
。PHP将路径视为加载原始脚本的相对位置,即index.php。可以这样想:
- 在脚本中,加载并运行
index.php
。 -
index.php
中包含includes/include.php
。这不会将您移动到includes/include.php
,而是获得includes/include.php
并将代码带入index.php
-
includes/include.php
中的所有代码都像在index.php
中一样运行。 - 包含
includes/config.php
。从技术上讲,您仍然在index.php
中,因此您必须引用文件,就像从index.php
中调用一样。
要修复包含路径,可以使用set_include_path函数并将完整路径添加到包括目录(或相对于包括),然后可以从路径中删除includes/
。如果在其他任何地方都找不到,PHP将检查文件是否在includes/
中。你也可以直接修改php.ini或。htaccess文件中的include_path指令。