Connecting Tech Pros Worldwide Forums | Help | Site Map

Problems getting "require" to work in PHP5 under Apache2

Mxsmanic
Guest
 
Posts: n/a
#1: Jul 17 '05
The require() I'm using in a PHP script has stopped working after I
moved from PHP4 and Apache 1.3.x to PHP5 and Apache 2.x. Now I get
messages like this:

Warning: main(/includes/ReloadScript.html) [function.main]: failed to
open stream: No such file or directory in
/usr/local/www/htdocs/main/AOLCompression.php on line 14

Fatal error: main() [function.require]: Failed opening required
'/includes/ReloadScript.html' (include_path='.:/usr/local/lib/php') in
/usr/local/www/htdocs/main/AOLCompression.php on line 14

I've seen references to the problems, but no workarounds or solutions.
What's the status? Is there a way around it?

--
Transpose hotmail and mxsmanic in my e-mail address to reach me directly.

Andy Hassall
Guest
 
Posts: n/a
#2: Jul 17 '05

re: Problems getting "require" to work in PHP5 under Apache2


On Sun, 19 Dec 2004 11:33:01 +0100, Mxsmanic <mxsmanic@hotmail.com> wrote:
[color=blue]
>The require() I'm using in a PHP script has stopped working after I
>moved from PHP4 and Apache 1.3.x to PHP5 and Apache 2.x. Now I get
>messages like this:
>
>Warning: main(/includes/ReloadScript.html) [function.main]: failed to
>open stream: No such file or directory in
>/usr/local/www/htdocs/main/AOLCompression.php on line 14
>
>Fatal error: main() [function.require]: Failed opening required
>'/includes/ReloadScript.html' (include_path='.:/usr/local/lib/php') in
>/usr/local/www/htdocs/main/AOLCompression.php on line 14[/color]

According to the message it's looking for:

/includes/ReloadScript.html

Note the leading slash, indicating it's looking from the root directory of the
server. Are you sure this is correct?

Does the actual require() statement have something prepended to the path,
perhaps a variable or constant, that due to your change in configuration is now
blank? Post line 14 of /usr/local/www/htdocs/main/AOLCompression.php (and any
previous line relevant to it, i.e. showing definitions of variables).

On a related note; are you sure you want to require() an html file? Wouldn't
readfile() be more appropriate?

--
Andy Hassall / <andy@andyh.co.uk> / <http://www.andyh.co.uk>
<http://www.andyhsoftware.co.uk/space> Space: disk usage analysis tool
Mxsmanic
Guest
 
Posts: n/a
#3: Jul 17 '05

re: Problems getting "require" to work in PHP5 under Apache2


Andy Hassall writes:
[color=blue]
> According to the message it's looking for:
>
> /includes/ReloadScript.html
>
> Note the leading slash, indicating it's looking from the root directory of the
> server. Are you sure this is correct?[/color]

It worked previously (in php4 under Apache 1.3.x).
[color=blue]
> Does the actual require() statement have something prepended to the path,
> perhaps a variable or constant, that due to your change in configuration is now
> blank? Post line 14 of /usr/local/www/htdocs/main/AOLCompression.php (and any
> previous line relevant to it, i.e. showing definitions of variables).[/color]

Yes. It had $DOCUMENT_ROOT prepended. That now appears to be blank;
I'm not sure why (I thought it was initialized to the document root from
the Apache configuration file). I changed this with php.ini, but it
still didn't work.

The original line looks like this in the script:

<?PHP require($DOCUMENT_ROOT."/includes/ReloadScript.html"); ?>
[color=blue]
> On a related note; are you sure you want to require() an html file? Wouldn't
> readfile() be more appropriate?[/color]

I originally wanted to make sure the include was there. The idea was to
emulate a #include line in a PHP script (since PHP scripts cannot use
SSI).

However, as an experiment after looking around the Net, I changed it to
this:

<?PHP require($_SERVER["DOCUMENT_ROOT"]."/includes/counter"); ?>

For some reason, this appears to work. I don't know why. The contents
of $_SERVER["DOCUMENT_ROOT"] should be the same as $DOCUMENT_ROOT,
right? Anyway, this is either a workaround or a fix (not sure which at
this point), because it eliminates the error. Did something change in
later versions of PHP4 or PHP5 (I was getting the same error with the
latest version of PHP4, so it wasn't just going to PHP5 that did it).

Also, when will the very latest version of PHP5 (5.0.3 or above) install
correctly? I'm still running 5.0.1 because that's apparently the last
version with a correct make install script (for FreeBSD UNIX).

--
Transpose hotmail and mxsmanic in my e-mail address to reach me directly.
Wayne
Guest
 
Posts: n/a
#4: Jul 17 '05

re: Problems getting "require" to work in PHP5 under Apache2


On Mon, 20 Dec 2004 05:56:50 +0100, Mxsmanic <mxsmanic@hotmail.com>
wrote:
[color=blue]
>However, as an experiment after looking around the Net, I changed it to
>this:
>
><?PHP require($_SERVER["DOCUMENT_ROOT"]."/includes/counter"); ?>
>
>For some reason, this appears to work. I don't know why. The contents
>of $_SERVER["DOCUMENT_ROOT"] should be the same as $DOCUMENT_ROOT,
>right? Anyway, this is either a workaround or a fix (not sure which at
>this point), because it eliminates the error. Did something change in
>later versions of PHP4 or PHP5 (I was getting the same error with the
>latest version of PHP4, so it wasn't just going to PHP5 that did it).[/color]

Only with register_globals enabled does $DOCUMENT_ROOT =
$_SERVER['DOCUMENT_ROOT']. Register_globals is considered a security
risk and is disabled in later version of PHP.

All this is explained in the manual.

Mxsmanic
Guest
 
Posts: n/a
#5: Jul 17 '05

re: Problems getting "require" to work in PHP5 under Apache2


Wayne writes:
[color=blue]
> All this is explained in the manual.[/color]

I wish there were 200 hours in a day so that I could actually read
manuals.

--
Transpose hotmail and mxsmanic in my e-mail address to reach me directly.
Closed Thread