Fixed bug #65559 (Opcache: cache not cleared if changes occur while running)

This commit is contained in:
Dmitry Stogov 2013-11-26 11:34:41 +04:00
parent 29ee38bf0d
commit a8c7e50f4d
6 changed files with 22 additions and 2 deletions

2
NEWS
View File

@ -13,6 +13,8 @@ PHP NEWS
- OPCache
. Fixed bug #65915 (Inconsistent results with require return value). (Dmitry)
. Fixed bug #65559 (Opcache: cache not cleared if changes occur while
running). (Dmitry)
- readline
. Fixed Bug #65714 (PHP cli forces the tty to cooked mode). (Remi)

View File

@ -103,6 +103,12 @@ opcache.revalidate_freq (default "2")
memory storage allocation. ("1" means validate once per second, but only
once per request. "0" means always validate)
opcache.file_update_protection (default "2")
Prevents caching files that are less than this number of seconds old.
It protects from caching of incompletely updated files. In case all file
updates on your site are atomic, you may increase performance setting it
to "0".
opcache.revalidate_path (default "0")
Enables or disables file search in include_path optimization
If the file search is disabled and a cached file is found that uses

View File

@ -1331,7 +1331,9 @@ static zend_persistent_script *compile_and_cache_file(zend_file_handle *file_han
}
#endif
if (ZCG(accel_directives).validate_timestamps || ZCG(accel_directives).max_file_size > 0) {
if (ZCG(accel_directives).validate_timestamps ||
ZCG(accel_directives).file_update_protection ||
ZCG(accel_directives).max_file_size > 0) {
size_t size = 0;
/* Obtain the file timestamps, *before* actually compiling them,
@ -1347,6 +1349,13 @@ static zend_persistent_script *compile_and_cache_file(zend_file_handle *file_han
return NULL;
}
/* check if file is too new (may be it's not written completely yet) */
if (ZCG(accel_directives).file_update_protection &&
(ZCG(request_time) - ZCG(accel_directives).file_update_protection < timestamp)) {
*op_array_p = accelerator_orig_compile_file(file_handle, type TSRMLS_CC);
return NULL;
}
if (ZCG(accel_directives).max_file_size > 0 && size > (size_t)ZCG(accel_directives).max_file_size) {
ZCSG(blacklist_misses)++;
*op_array_p = accelerator_orig_compile_file(file_handle, type TSRMLS_CC);

View File

@ -229,6 +229,7 @@ typedef struct _zend_accel_directives {
zend_bool inherited_hack;
zend_bool enable_cli;
unsigned long revalidate_freq;
unsigned long file_update_protection;
char *error_log;
#ifdef ZEND_WIN32
char *mmap_base;

View File

@ -259,7 +259,8 @@ ZEND_INI_BEGIN()
STD_PHP_INI_ENTRY("opcache.consistency_checks" , "0" , PHP_INI_ALL , OnUpdateLong, accel_directives.consistency_checks, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.force_restart_timeout" , "180" , PHP_INI_SYSTEM, OnUpdateLong, accel_directives.force_restart_timeout, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.revalidate_freq" , "2" , PHP_INI_ALL , OnUpdateLong, accel_directives.revalidate_freq, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.preferred_memory_model", "" , PHP_INI_SYSTEM, OnUpdateStringUnempty, accel_directives.memory_model, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.file_update_protection", "2" , PHP_INI_ALL , OnUpdateLong, accel_directives.file_update_protection, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.preferred_memory_model", "" , PHP_INI_SYSTEM, OnUpdateStringUnempty, accel_directives.memory_model, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.blacklist_filename" , "" , PHP_INI_SYSTEM, OnUpdateString, accel_directives.user_blacklist_filename, zend_accel_globals, accel_globals)
STD_PHP_INI_ENTRY("opcache.max_file_size" , "0" , PHP_INI_SYSTEM, OnUpdateLong, accel_directives.max_file_size, zend_accel_globals, accel_globals)

View File

@ -241,6 +241,7 @@ $ini_overwrites = array(
'precision=14',
'memory_limit=128M',
'opcache.fast_shutdown=0',
'opcache.file_update_protection=0',
);
function write_information($show_html)