Bug #69199 [ReO->Fbk]: require_once doesn't require ./ files

From: Date: Mon, 07 Dec 2020 15:57:17 +0000
Subject: Bug #69199 [ReO->Fbk]: require_once doesn't require ./ files
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-230911@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
 Updated by:         cmb@php.net
 Reported by:        pegasus at vaultwiki dot org
 Summary:            require_once doesn't require ./ files
-Status:             Re-Opened
+Status:             Feedback
 Type:               Bug
 Package:            opcache
 Operating System:   Centos 6 64-bit
 PHP Version:        master-Git-2015-03-07 (Git)
-Assigned To:        
+Assigned To:        cmb
 Block user comment: N
 Private report:     N

 New Comment:

Is this still an issue with any of the actively supported PHP
version[1]?  If so, do you use a thread safe (ZTS) PHP build?

[1] <https://www.php.net/supported-versions.php>


Previous Comments:
------------------------------------------------------------------------
[2015-03-27 16:06:13] pegasus at vaultwiki dot org

I also cannot reproduce this when the following ini is present:

opcache.revalidate_path=1

------------------------------------------------------------------------
[2015-03-27 15:48:43] pegasus at vaultwiki dot org

Confirmed on the latest build that this issue is only reproducible with the following ini:

opcache.use_cwd=1

The issue does not occur with:

opcache.use_cwd=0

------------------------------------------------------------------------
[2015-03-27 07:05:18] rasmus@php.net

Still unable to reproduce. I followed your steps exactly. My pass #1 and pass #3 outputs are
identical. Current PHP 7 build running php-fpm under nginx on Debian8.

------------------------------------------------------------------------
[2015-03-26 13:14:05] pegasus at vaultwiki dot org

As a follow-up, I have discovered that once this error occurs, the PHP output is used for every PHP
script in the future.

e.g. we made the error occur in main.php
But if we have another script main2.php that has completely different code and output, the previous
incorrect output of main.php is used. This explains why all the sites on my server go down together
when this error occurs on just one of them (even sites using different FPM pools).

------------------------------------------------------------------------
[2015-03-26 13:07:09] pegasus at vaultwiki dot org

Following the logic of my previous post, I am now able to consistently reproduce this bug in a very
simple script with all files in the same local directory (no sub-directories, no symlinked
directories, and none of the parent directories are symlinked anywhere as far as I know):

#### 1.php ####

require_once('./2.php');

function test1()
{
	echo 'never used';
}

#### 2.php ####

function test2()
{
	echo 'SUCCESS';
}

#### main.php ####

require_once('./1.php');
number_format('string');

test2();
exit;

#### main.php attempt #1 EXPECT & ACTUAL ####

Warning: number_format() expects parameter 1 to be float, string given in main.php on line X

SUCCESS

#### 

After receiving the correct actual proceed to place an "exit;" after the line that throws
an error. Run main.php again.

#### main.php attempt #2 EXPECT & ACTUAL ####

Warning: number_format() expects parameter 1 to be float, string given in main.php on line X

####

After receiving this correct actual proceed to remove the previously added "exit;" and run
main.php again. EXPECT: same result as pass #1

#### main.php attempt #3 ACTUAL ####

Warning: number_format() expects parameter 1 to be float, string given in main.php on line X

Fatal error: Call to undefined function test2() in main.php on line Y

###

Hope this helps. Basically in practice I am thinking this means that any time our real code goes
through a custom error or exception handler, future calls to the second ./ include from that process
will be ignored. This gives me some ideas where to start looking to workaround this issue while you
are figuring out the root cause.

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


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=69199


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


Thread (21 messages)

« previous php.bugs (#230911) next »