使用未定义的常量通知

时间:2013-08-04 04:43:42

标签: php notice

我稍微阅读了这个问题,主要来自这里的文章。看起来它通常是由试图$foo[bar]代替$foo['bar']的人生成的,但我已经多次检查过我的脚本中出现错误的位置,这是不是案件。

我有一个php文件,其中包含以下脚本:

define("APP_PATH", "http://localhost/foobar");

require_once APP_PATH . "/classes/controller.php";

这似乎执行得很好。在controller.php内我有这段代码:

require_once APP_PATH . "/classes/factory.class.php";

$factory = new factory;

据我所知,这应该完美无缺。但是,我收到以下错误:Notice: Use of undefined constant APP_PATH - assumed 'APP_PATH' in C:\wamp\www\foobar\classes\controller.php on line 3。第3行是对require_once的调用。

我已经检查过,我很确定这不应该导致错误。我也检查了我的拼写。同一行还会触发警告以及关于无法打开流的致命错误,它会返回APP_PATH/classes/factory.class.php作为路径。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

问题是你是从一个偏远的地方来的。

假设APP_PATH.'/classes/controller.php'如下:

<?php
class Some_Controller extends Controller {
    // ...
}
echo 'TEST!';

当你通过HTTP包含它时,PHP解释器会在将文件发回之前对其进行解析:

<?php
include APP_PATH.'/classes/controller.php';
// This will print "TEST!" to the page because PHP has
// parsed the code and the only thing in the output
// buffer is "TEST!" (from the "echo 'TEST!';")

为了解决此问题,您需要包含本地环境。在Linux中,它会像

一样
/path/to/web/classes/controller.php

在Windows中,它将类似于:

C:\path\to\web\classes\controller.php