2013-04-24 89 views
5

我是PHP新手,我开始使用XAMPP构建网站。我有下面的代码PHP包含文件但未定义变量

db.php中:

<?php 
    $hostName='localhost'; 
    $userName='xxxxxxxxx'; 
    $userPass='xxxxxxxxx'; 
?> 

和test.php的:

<?php 
    include 'db.php'; 
    echo $hostName; 
?> 

但现在它告诉我注意:未定义的变量:主机名

什么我发现是register_globals需要在php.ini中设置“on”,但在设置后,XAMPP显示:指令'register_globals'没有时间r当PHP重新启动XAMPP时,可在PHP中找到。

我将相同的代码移动到Hosting24,但它的工作,任何人都可以帮忙?

+1

文件的访问权限是在同一文件夹中的文件?顺便说一句,这与'register_globals'无关,它确实从PHP中删除。 – 2013-04-24 08:29:46

+0

是的,这两个文件在同一个文件夹 – crossRT 2013-04-24 08:30:16

+0

尝试在db.php中打印类似echo“hi”的文件,然后运行test.php.this将显示更多db.php文件被添加到您的文件中 – 2013-04-24 08:30:35

回答

0

发生这种情况的唯一原因是文件db.php未正确包含。检查你的日志文件为什么发生这种情况。

当你包含一个文件时,PHP将这个文件视为直接复制/粘贴代码到包含文件中。因此,包含文件中定义的所有变量将与包含文件具有相同的范围,因此可用。

在你的例子中,它应该工作。所以我的答案是:检查您的日志文件是否包含错误。确保日志记录设置为FULL。

+0

我使用get_required_files()和'db.php'在列表中。 我可以知道如何检查日志文件吗?对不起,我很新的PHP – crossRT 2013-04-24 08:45:43

+0

你的日志文件存储在:'\ xampp \ apache \ logs \ error.log'。如果不存在,请检查通过运行'phpinfo()'得到的'error_log'设置。当你遇到问题时,检查日志文件总是很好的做法:) – 2013-04-24 08:48:08

+0

是的,我发现,感谢您的建议。 = D 但是日志文件没有关于未定义变量的相关事件:( – crossRT 2013-04-24 08:59:26

4

我刚刚遇到类似的问题 - 绝对不是OP的问题,但属于问题的标题。

在我的情况下,我在服务器上禁用了PHP短标签,但是包含的文件意外地使用了短标签。包含文件时,函数未定义,并且没有包含错误。我认为在这种情况下发生的是该文件包含在内,但被视为空文件。

如果您在包含/要求后有“未定义”问题,请检查您的文件标签 - 以防万一。

+1

最近我遇到了同样的问题,虽然我经过一番努力后发现问题,但您的陈述是绝对正确的 – Bsienn 2016-02-16 13:13:00

-1

尝试使用require_once('db.php')而不是包含。

+0

您可以详细解释一下您的答案,然后再添加关于您提供的解决方案的更多描述? – abarisone 2015-06-15 07:06:19

+0

在'test.php'中,而不是'include'include。 php';',用'require_once('db.php');' – Arjun 2015-06-15 16:19:14

0

我有一个类似的问题,发生了什么是问题对于文件

+0

替换它'为了批评或要求作者澄清,在他们的帖子下留下评论 - 你总是可以评论在你自己的帖子上,一旦你有足够的[声誉](http://stackoverflow.com/help/whats-reputation)你将能够[评论任何帖子](http://stackoverflow.com /帮助/权限/评论)。 – Atomix 2015-07-27 11:08:40

+2

嗨@JoJoe为你提供的信息,它确实回答了作者提出的问题。没有什么需要说明的。这肯定是可能导致这里面临不稳定问题的原因之一。任何新手PHP开发人员也可能得到我的意思。如果你猜我错了,那你为什么不提供答案,而不是对社区的新贡献者粗鲁。温暖的问候。 – 2015-07-27 11:40:50

+0

嗨@acoustichead,不要把这个过于个人化,这是由SO自动生成的文本。有人将您的答案标记为低质量(可能是因为其长度),它显示在审阅队列中,当我检查它时,我将其标记为“应该是评论”。我这样做是因为我认为缺乏必要的长度和解释深度才能成为答案。然后系统会自动评论答案,但不会使用最佳选择的单词,但它并不那么灵活。如果其他评论者认为你的回答是好的,那么绝对不会发生任何事情。 :) – Atomix 2015-07-27 12:03:46