I've read up on this problem a little, mainly from articles on here. It appears that it is typically generated by someone trying to do $foo[bar]
instead of $foo['bar']
, but I have checked several times around where the error is occuring in my script and this is not the case.
I have a php file, which contains the following script:
define("APP_PATH", "http://localhost/foobar");
require_once APP_PATH . "/classes/controller.php";
This appears to be executing fine. Inside controller.php
I have this code:
require_once APP_PATH . "/classes/factory.class.php";
$factory = new factory;
This, to my knowledge, should execute perfectly fine. However, I am getting the following error: Notice: Use of undefined constant APP_PATH - assumed 'APP_PATH' in C:\wamp\www\foobar\classes\controller.php on line 3
. Line 3 is the call to require_once
.
I have checked, I am fairly sure that this should not be causing an error. I've also checked my spelling. The same line also triggers a warning and a fatal error about failing to open the stream, it is returning APP_PATH/classes/factory.class.php
as the path.
Any help would be much appreciated.
The problem is that you are including from a remote place.
Let's say that APP_PATH.'/classes/controller.php'
is as follows:
<?php
class Some_Controller extends Controller {
// ...
}
echo 'TEST!';
When you include it through HTTP the PHP interpreter will parse the file before sending it back to be included:
<?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!';")
In order to fix this you need to include from the local environment. In Linux it would be some like
/path/to/web/classes/controller.php
In Windows it would be something like:
C:\path\to\web\classes\controller.php