diff options
| -rw-r--r-- | ext/opcache/README | 6 | ||||
| -rw-r--r-- | ext/opcache/ZendAccelerator.c | 11 | ||||
| -rw-r--r-- | ext/opcache/ZendAccelerator.h | 1 | ||||
| -rw-r--r-- | ext/opcache/zend_accelerator_module.c | 3 | ||||
| -rwxr-xr-x | run-tests.php | 1 |
5 files changed, 20 insertions, 2 deletions
diff --git a/ext/opcache/README b/ext/opcache/README index 2e30d92c00..cb6ac342c4 100644 --- a/ext/opcache/README +++ b/ext/opcache/README @@ -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 diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c index 0d7b94057b..bccd2b5e74 100644 --- a/ext/opcache/ZendAccelerator.c +++ b/ext/opcache/ZendAccelerator.c @@ -1335,7 +1335,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, @@ -1351,6 +1353,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); diff --git a/ext/opcache/ZendAccelerator.h b/ext/opcache/ZendAccelerator.h index 2f6ee068e8..487010ba27 100644 --- a/ext/opcache/ZendAccelerator.h +++ b/ext/opcache/ZendAccelerator.h @@ -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; diff --git a/ext/opcache/zend_accelerator_module.c b/ext/opcache/zend_accelerator_module.c index 2ee02a60ce..cd840fd7dd 100644 --- a/ext/opcache/zend_accelerator_module.c +++ b/ext/opcache/zend_accelerator_module.c @@ -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) diff --git a/run-tests.php b/run-tests.php index 02d4665bcb..45ea29de51 100755 --- a/run-tests.php +++ b/run-tests.php @@ -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) |
