mirror of
https://github.com/php/php-src.git
synced 2024-11-23 18:04:36 +08:00
Invalidate path even if the file was deleted
Closes GH-12323
This commit is contained in:
parent
54452b4811
commit
f4ab494906
3
NEWS
3
NEWS
@ -37,6 +37,9 @@ PHP NEWS
|
||||
. Fixed bug GH-12297 (PHP Startup: Invalid library (maybe not a PHP library)
|
||||
'mysqlnd.so' in Unknown on line). (nielsdos)
|
||||
|
||||
- Opcache:
|
||||
. Fixed opcache_invalidate() on deleted file. (mikhainin)
|
||||
|
||||
- PCRE:
|
||||
. Fixed bug GH-11956 (Backport upstream fix, PCRE regular expressions with
|
||||
JIT enabled gives different result). (nielsdos)
|
||||
|
@ -1322,6 +1322,7 @@ int zend_accel_invalidate(zend_string *filename, bool force)
|
||||
{
|
||||
zend_string *realpath;
|
||||
zend_persistent_script *persistent_script;
|
||||
zend_bool file_found = true;
|
||||
|
||||
if (!ZCG(accelerator_enabled) || accelerator_shm_read_lock() != SUCCESS) {
|
||||
return FAILURE;
|
||||
@ -1330,7 +1331,10 @@ int zend_accel_invalidate(zend_string *filename, bool force)
|
||||
realpath = accelerator_orig_zend_resolve_path(filename);
|
||||
|
||||
if (!realpath) {
|
||||
return FAILURE;
|
||||
//file could have been deleted, but we still need to invalidate it.
|
||||
//so instead of failing, just use the provided filename for the lookup
|
||||
realpath = zend_string_copy(filename);
|
||||
file_found = false;
|
||||
}
|
||||
|
||||
if (ZCG(accel_directives).file_cache) {
|
||||
@ -1366,12 +1370,13 @@ int zend_accel_invalidate(zend_string *filename, bool force)
|
||||
|
||||
file_handle.opened_path = NULL;
|
||||
zend_destroy_file_handle(&file_handle);
|
||||
file_found = true;
|
||||
}
|
||||
|
||||
accelerator_shm_read_unlock();
|
||||
zend_string_release_ex(realpath, 0);
|
||||
|
||||
return SUCCESS;
|
||||
return file_found ? SUCCESS : FAILURE;
|
||||
}
|
||||
|
||||
static zend_string* accel_new_interned_key(zend_string *key)
|
||||
|
26
ext/opcache/tests/opcache_invalidate_deleted_file.phpt
Normal file
26
ext/opcache/tests/opcache_invalidate_deleted_file.phpt
Normal file
@ -0,0 +1,26 @@
|
||||
--TEST--
|
||||
opcache_invalidate() should invalidate deleted file
|
||||
--EXTENSIONS--
|
||||
opcache
|
||||
--INI--
|
||||
opcache.enable_cli=1
|
||||
opcache.validate_timestamps=0
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$file = __DIR__ . DIRECTORY_SEPARATOR . pathinfo(__FILE__, PATHINFO_FILENAME) . '.inc';
|
||||
file_put_contents($file, <<<PHP
|
||||
<?php
|
||||
return 42;
|
||||
PHP);
|
||||
var_dump(include $file);
|
||||
unlink($file);
|
||||
var_dump(include $file);
|
||||
opcache_invalidate($file);
|
||||
var_dump(@(include $file));
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
int(42)
|
||||
int(42)
|
||||
bool(false)
|
Loading…
Reference in New Issue
Block a user