Bug #76801 [Com]: require()ing a file blocks writing or deleting the file

From: 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

« previous php.bugs (#217088) next »