我买了一台新笔记本电脑并安装了新版本的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上配置的问题吗?
答案 0 :(得分:1)
通常PHP核心设置include_path
也包含当前路径:它由.
(一个点)表示,添加到包含的路径列表中:
include_path=".;c:\php\includes"
引用the doc:
在包含路径中使用
.
允许相对包含,因为它意味着 当前目录。但是,明确使用它更有效 包括'./file'
,而不是让PHP总是检查当前目录 对于每一个包括。
是的,任何barename(非引用字符串)都将被PHP作为常量名称处理。如果未定义此常量(如您的情况),PHP会将其转换为字符串(尽管发出通知)。
答案 1 :(得分:0)
通知错误是因为您正在访问像$ 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中的include_path指令或.htaccess文件。