Problems getting "require" to work in PHP5 under Apache2

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mxsmanic

    Problems getting "require" to work in PHP5 under Apache2

    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.ht ml) [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.requir e]: Failed opening required
    '/includes/ReloadScript.ht ml' (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

    #2
    Re: Problems getting "require&q uot; to work in PHP5 under Apache2

    On Sun, 19 Dec 2004 11:33:01 +0100, Mxsmanic <mxsmanic@hotma il.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.ht ml) [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.requir e]: Failed opening required
    >'/includes/ReloadScript.ht ml' (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.ht ml

    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.andyhsoftwa re.co.uk/space> Space: disk usage analysis tool

    Comment

    • Mxsmanic

      #3
      Re: Problems getting &quot;require&q uot; to work in PHP5 under Apache2

      Andy Hassall writes:
      [color=blue]
      > According to the message it's looking for:
      >
      > /includes/ReloadScript.ht ml
      >
      > 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($DOCUME NT_ROOT."/includes/ReloadScript.ht ml"); ?>
      [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($_SERVE R["DOCUMENT_R OOT"]."/includes/counter"); ?>

      For some reason, this appears to work. I don't know why. The contents
      of $_SERVER["DOCUMENT_R OOT"] 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.

      Comment

      • Wayne

        #4
        Re: Problems getting &quot;require&q uot; to work in PHP5 under Apache2

        On Mon, 20 Dec 2004 05:56:50 +0100, Mxsmanic <mxsmanic@hotma il.com>
        wrote:
        [color=blue]
        >However, as an experiment after looking around the Net, I changed it to
        >this:
        >
        ><?PHP require($_SERVE R["DOCUMENT_R OOT"]."/includes/counter"); ?>
        >
        >For some reason, this appears to work. I don't know why. The contents
        >of $_SERVER["DOCUMENT_R OOT"] 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_global s enabled does $DOCUMENT_ROOT =
        $_SERVER['DOCUMENT_ROOT']. Register_global s is considered a security
        risk and is disabled in later version of PHP.

        All this is explained in the manual.

        Comment

        • Mxsmanic

          #5
          Re: Problems getting &quot;require&q uot; 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.

          Comment

          Working...