Bug #76801 [Com]: require()ing a file blocks writing or deleting the file
| From: | andrew at nicols dot co dot uk | Date: | Mon, 17 Sep 2018 04:11:12 +0000 |
| Subject: | Bug #76801 [Com]: require()ing a file blocks writing or deleting the file | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-217088@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=76801&edit=1
ID: 76801
Comment by: andrew at nicols dot co dot uk
Reported by: peehaa@php.net
Summary: require()ing a file blocks writing or deleting the
file
Status: Open
Type: Bug
Package: phpdbg
Operating System: Windows
PHP Version: 7.2.9
Block user comment: N
Private report: N
New Comment:
Sorry, to confirm the previous comment relates to the patch suggested by cmb@php.net
Calling a.php via php directly:
2054 nicols@boysenberry:~/git/tmp> php a.php
/Users/nicols/git/tmp/b.php was included
Calling it via phpdbg -qqr:
2055 nicols@boysenberry:~/git/tmp> phpdbg -qqr a.php
/Users/nicols/git/tmp/b.php was included
/Users/nicols/git/tmp/b.php was included
[Script ended normally]
prompt>
Essentially it appears that when called via PHP CLI, a file included via require or include is not
subsequently loaded if called via require_once or include_once.
However if it is called via phpdbg, it is included again.
Previous Comments:
------------------------------------------------------------------------
[2018-09-17 04:05:37] andrew at nicols dot co dot uk
The attached patch fails with the following test:
a.php:
```
<?php
require('b.php');
require_once('b.php');
```
b.php:
```
<?php
echo __FILE__ . " was included\n";
```
------------------------------------------------------------------------
[2018-09-17 00:25:04] andrew at nicols dot co dot uk
I've just tried your patch cmb and it is indeed freeing up files now, but I'm also seeing
files loaded twice in a require_once with this patch.
I haven't been able to replicate it outside of phpunit yet with a simple testcase. This
wasn't happening before I applied the patch.
------------------------------------------------------------------------
[2018-09-14 13:49:56] cmb@php.net
Related To: Bug #76882
------------------------------------------------------------------------
[2018-08-30 15:00:03] cmb@php.net
It seems that under the CLI SAPI for the included file
compile_filename()[1] is called, but not under the phpdbg SAPI.
compile_filename() calls zend_destroy_file_hande()[2] after having
called zend_compile_file(). I have checked this on Windows only,
but I guess the calls are the same on Linux.
[1] <https://github.com/php/php-src/blob/php-7.3.0beta2/Zend/zend_language_scanner.l#L643>
[2] <https://github.com/php/php-src/blob/php-7.3.0beta2/Zend/zend_language_scanner.l#L672>
------------------------------------------------------------------------
[2018-08-30 06:03:57] bwoebi@php.net
Then I'm seriously confused, as phpdbg_init_compile_file() does exactly the same thing as
compile_file() does - what am I missing?
------------------------------------------------------------------------
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=76801
--
Edit this bug report at https://bugs.php.net/bug.php?id=76801&edit=1