2013-08-04 3 views
1

Я немного изучил эту проблему, главным образом, из статей здесь. Похоже, что он обычно генерируется кем-то, пытающимся сделать $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

я чувствую, что это что-то делать с тем, вы используете схему URI, чтобы включить файл – DevZer0

+1

Потому что если вы включаете файл в качестве URL-адреса, вы получите обработанный файл. PHP пытается обработать controller.php, чтобы отправить его в запрашивающий файл, но константа там не определена. Я надеюсь, что это имело смысл :) – ironcito

+0

Спасибо за комментарии, изменив определение от URL-адреса http: //. – Seabody

ответ

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 
+0

Прохладный, спасибо за ответ. Я изменил определение APP_PATH на 'dirname (__ FILE __)', который, похоже, работает. – Seabody

+0

Если у вас PHP> = 5.3.0, вы также можете установить его на '__DIR__'. –

Смежные вопросы

 Смежные вопросы