1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Merge branch 'PHP-8.3'

* PHP-8.3:
  Invalidate path even if the file was deleted
This commit is contained in:
Ilija Tovilo
2023-10-03 15:33:02 +02:00
2 changed files with 33 additions and 2 deletions

View File

@@ -1391,6 +1391,7 @@ zend_result 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;
@@ -1399,7 +1400,10 @@ zend_result 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) {
@@ -1424,12 +1428,13 @@ zend_result 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)

View 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)