-
Notifications
You must be signed in to change notification settings - Fork 7.9k
opcache: support file_cache_read_only (php#16484) #16551
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
2e614ae
c32b7ea
9c42cd1
79dd38e
1197a96
86e5178
3397f29
8c43a77
8aaa51d
3e1c63b
9510786
c45c69e
e5526bd
112b9d6
62765b7
35bca09
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1411,6 +1411,9 @@ zend_result zend_accel_invalidate(zend_string *filename, bool force) | |
} | ||
|
||
if (ZCG(accel_directives).file_cache) { | ||
if (ZCG(accel_directives).file_cache_read_only) { | ||
return FAILURE; | ||
} | ||
zend_file_cache_invalidate(realpath); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should skip |
||
} | ||
|
||
|
@@ -3300,6 +3303,39 @@ static zend_result accel_post_startup(void) | |
#endif | ||
accel_shared_globals = calloc(1, sizeof(zend_accel_shared_globals)); | ||
} | ||
|
||
/* opcache.file_cache_read_only should only be enabled when all script files are read-only */ | ||
if (ZCG(accel_directives).file_cache_read_only) { | ||
if (!ZCG(accel_directives).file_cache) { | ||
accel_startup_ok = false; | ||
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache_read_only is set without a proper setting of opcache.file_cache"); | ||
return SUCCESS; | ||
} | ||
if (ZCG(accel_directives).revalidate_freq != 0) { | ||
accel_startup_ok = false; | ||
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache_read_only cannot be enabled when opcache.revalidate_freq is not 0."); | ||
return SUCCESS; | ||
} | ||
if (ZCG(accel_directives).validate_timestamps) { | ||
accel_startup_ok = false; | ||
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache_read_only cannot be enabled when opcache.validate_timestamps is enabled."); | ||
return SUCCESS; | ||
} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think, these checks may be removed. |
||
} else { | ||
/* opcache.file_cache isn't read only, so ensure the directory is writable */ | ||
if ( ZCG(accel_directives).file_cache && | ||
#ifndef ZEND_WIN32 | ||
access(ZCG(accel_directives).file_cache, R_OK | W_OK | X_OK) != 0 | ||
#else | ||
_access(ZCG(accel_directives).file_cache, 06) != 0 | ||
#endif | ||
) { | ||
accel_startup_ok = false; | ||
zend_accel_error_noreturn(ACCEL_LOG_FATAL, "opcache.file_cache must be a full path of an accessible, writable directory"); | ||
return SUCCESS; | ||
} | ||
} | ||
|
||
#if ENABLE_FILE_CACHE_FALLBACK | ||
file_cache_fallback: | ||
#endif | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -172,9 +172,9 @@ static ZEND_INI_MH(OnUpdateFileCache) | |
zend_stat(ZSTR_VAL(new_value), &buf) != 0 || | ||
!S_ISDIR(buf.st_mode) || | ||
#ifndef ZEND_WIN32 | ||
access(ZSTR_VAL(new_value), R_OK | W_OK | X_OK) != 0) { | ||
access(ZSTR_VAL(new_value), R_OK | X_OK) != 0) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Probably, this check may be completely moved into accel_post_startup(). |
||
#else | ||
_access(ZSTR_VAL(new_value), 06) != 0) { | ||
_access(ZSTR_VAL(new_value), 04) != 0) { | ||
#endif | ||
zend_accel_error(ACCEL_LOG_WARNING, "opcache.file_cache must be a full path of accessible directory.\n"); | ||
new_value = NULL; | ||
|
@@ -311,9 +311,10 @@ ZEND_INI_BEGIN() | |
STD_PHP_INI_ENTRY("opcache.mmap_base", NULL, PHP_INI_SYSTEM, OnUpdateString, accel_directives.mmap_base, zend_accel_globals, accel_globals) | ||
#endif | ||
|
||
STD_PHP_INI_ENTRY("opcache.file_cache" , NULL , PHP_INI_SYSTEM, OnUpdateFileCache, accel_directives.file_cache, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_only" , "0" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_only, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_consistency_checks" , "1" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_consistency_checks, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_ENTRY("opcache.file_cache" , NULL , PHP_INI_SYSTEM, OnUpdateFileCache, accel_directives.file_cache, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_read_only" , "0" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_read_only, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_only" , "0" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_only, zend_accel_globals, accel_globals) | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_consistency_checks" , "1" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_consistency_checks, zend_accel_globals, accel_globals) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It's better not to mix new features with white-space changes to keep the path small and easy readable. |
||
#if ENABLE_FILE_CACHE_FALLBACK | ||
STD_PHP_INI_BOOLEAN("opcache.file_cache_fallback" , "1" , PHP_INI_SYSTEM, OnUpdateBool, accel_directives.file_cache_fallback, zend_accel_globals, accel_globals) | ||
#endif | ||
|
@@ -823,6 +824,7 @@ ZEND_FUNCTION(opcache_get_configuration) | |
#endif | ||
|
||
add_assoc_string(&directives, "opcache.file_cache", ZCG(accel_directives).file_cache ? ZCG(accel_directives).file_cache : ""); | ||
add_assoc_bool(&directives, "opcache.file_cache_read_only", ZCG(accel_directives).file_cache_read_only); | ||
add_assoc_bool(&directives, "opcache.file_cache_only", ZCG(accel_directives).file_cache_only); | ||
add_assoc_bool(&directives, "opcache.file_cache_consistency_checks", ZCG(accel_directives).file_cache_consistency_checks); | ||
#if ENABLE_FILE_CACHE_FALLBACK | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
realpath
must be released here