Bug #69199 [Com]: require_once doesn't require ./ files

From: Date: Mon, 09 Mar 2015 17:04:28 +0000
Subject: Bug #69199 [Com]: require_once doesn't require ./ files
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-191269@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=69199&edit=1

 ID:                 69199
 Comment by:         pegasus at vaultwiki dot org
 Reported by:        pegasus at vaultwiki dot org
 Summary:            require_once doesn't require ./ files
 Status:             Feedback
 Type:               Bug
 Package:            Scripting Engine problem
 Operating System:   Centos 6 64-bit
 PHP Version:        master-Git-2015-03-07 (Git)
 Block user comment: N
 Private report:     N

 New Comment:

Strange. Re-did make install, restarted php-fpm, and this issue has magically disappeared.


Previous Comments:
------------------------------------------------------------------------
[2015-03-08 05:01:26] rasmus@php.net

I am not able to reproduce this. Can you provide a standalone example?
Looking at both the code and an strace, nothing has changed here. An explicit require of
./includes/filename.php will only attempt to load that file from the directory the parent script is
in.

------------------------------------------------------------------------
[2015-03-08 02:55:18] demon@php.net

Could you please check your report_erroring level? Maybe the level is too High. In my computer I get
two Warning:

Warning: include_once(./2.php): failed to open stream: No such file or directory in /tmp/1.php on
line 3

Warning: include_once(): Failed opening './2.php' for inclusion
(include_path='.:') in /tmp/1.php on line 3
array(1) {
  [0]=>
  string(10) "/tmp/1.php"
}

------------------------------------------------------------------------
[2015-03-07 18:37:52] pegasus at vaultwiki dot org

Which commit should I be trying for the fix? I'm not seeing any related changes in the
shortlog.

Even if include_path causes the issue, I would expect that a Fatal Error is thrown when it
can't find the required file in either the include_path or the current directory. The behavior
I experienced was that it just ignored the file entirely and proceeded with execution until
something in the unloaded file was used.

------------------------------------------------------------------------
[2015-03-07 18:08:27] demon@php.net

It seems that include_path causes the issue. When you are running the script, "./xxxx.php"
will be searched in the current directory and include_path.

e.g. The scriptname that you are going to run is /a/b/c.php. 
1. cd /a/b
2. php c.php

Could you please check if the issue is fixed?

------------------------------------------------------------------------
[2015-03-07 15:29:11] pegasus at vaultwiki dot org

Description:
------------
After trying to run vBulletin under Master, I've found that I get Fatal Error: undefined
function for a lot of functions which are normally included under PHP 5.6.

After investigating more closely, the affected functions are all included using the format:

require_once('./includes/filename.php');

If I dump the results of get_included_files(), I find that this file never gets included.

However, if I modify the line like so:

require_once('includes/filename.php');

Then all the functions are included as expected. It seems to me that require_once just skips
anything starting with ./
If my include paths were configured incorrectly, I would expect a Fatal Error due to
file-not-being-found.

Expected result:
----------------
Functions in ./ includes should be included.

Actual result:
--------------
Functions in ./ includes are not included.


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=69199&edit=1


Thread (21 messages)

« previous php.bugs (#191269) next »