php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #76194 built-in function include_once bug with opcache ext open
Submitted: 2018-04-08 03:21 UTC Modified: -
From: 415401620 at qq dot com Assigned:
Status: Open Package: opcache
PHP Version: 7.1.16 OS: Ubuntu 16.04 LTS
Private report: No CVE-ID: None
Have you experienced this issue?
Rate the importance of this bug to you:

 [2018-04-08 03:21 UTC] 415401620 at qq dot com
Description:
------------
1. My php.ini file for opcache is the default configuration.
2. Bug description:
When I use include_once to load a config.php file I found that if I delete and recreate the new config.php file.It will not load the current file and include_once return false.But,it don not load the current file correctly either.
I use this test script to show what I mean.

There are test steps:

- create a test.php in your web server root path.
- access the test.php with browser
- see the output for get_included_files,it will be :

Array ( [0] => /home/vaxilicaihouxian/codes/php/ect/eastsea.app/test.php ) 123Array ( [0] => /home/vaxilicaihouxian/codes/php/ect/eastsea.app/test.php [1] => /tmp/abc.php )

- access the test.php with browser again,the output will be:

123

- remove the /tmp/abc.php with command `rm -f /tmp/abc.php`
- access the test.php with browser finally and the output is:

Array ( [0] => /home/vaxilicaihouxian/codes/php/ect/eastsea.app/test.php [1] => /tmp/abc.php ) Array ( [0] => /home/vaxilicaihouxian/codes/php/ect/eastsea.app/test.php [1] => /tmp/abc.php )

3. Why there is the `/tmp/abc.php` in the finally output array of get_included_files() .It dose not exits but has been included with include_once.
So the second include_once will not work to include my new generating config.php.



Test script:
---------------
<?php
if(!@include_once('/tmp/abc.php')){
    print_r(get_included_files());
    swritefile('/tmp/abc.php','<?php echo 123;');
    include('/tmp/abc.php');
    print_r(get_included_files());
}

function swritefile($filename, $writetext, $openmod='w')
{
    if (@$fp = fopen($filename, $openmod)) {

        flock($fp, 2);

        fwrite($fp, $writetext);

        fclose($fp);

        return true;

    }
}

Expected result:
----------------
It should load the new generating file correctly and not ignore by the first include_once function.

Actual result:
--------------
The second include_once function ignore the config file.

Patches

Add a Patch

Pull Requests

Add a Pull Request

 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Tue Jan 22 00:01:24 2019 UTC