-
Notifications
You must be signed in to change notification settings - Fork 89
/
Copy pathSystemOpCache_Core.php
81 lines (74 loc) · 2.48 KB
/
SystemOpCache_Core.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
/**
* File: SystemOpCache_Core.php
*
* @package W3TC
*/
namespace W3TC;
/**
* Class SystemOpCache_Core
*/
class SystemOpCache_Core {
/**
* Checks if opcode caching is enabled.
*
* This method verifies if either Zend OPcache or APCu OPcache is enabled
* on the server.
*
* @return bool True if opcode caching is enabled, false otherwise.
*/
public function is_enabled() {
return Util_Installed::opcache() || Util_Installed::apc_opcache();
}
/**
* Flushes the opcode cache.
*
* Clears the opcode cache for the currently enabled caching mechanism
* (either Zend OPcache or APCu OPcache). If no supported opcode caching
* mechanism is found, it returns false.
*
* @return bool True if the cache was successfully cleared, false otherwise.
*/
public function flush() {
if ( Util_Installed::opcache() ) {
return opcache_reset();
} elseif ( Util_Installed::apc_opcache() ) {
$result = apc_clear_cache(); // that doesnt clear user cache.
$result |= apc_clear_cache( 'opcode' ); // extra.
return $result;
}
return false;
}
/**
* Flushes the opcode cache for a specific file.
*
* This method attempts to invalidate the opcode cache for a given file
* by first resolving its path and then using the appropriate caching
* function (e.g., `opcache_invalidate` or `apc_compile_file`). If the file
* cannot be resolved or the cache cannot be invalidated, it returns false.
*
* @param string $filename The relative or absolute path to the file.
*
* @return bool True if the file cache was successfully invalidated, false otherwise.
*/
public function flush_file( $filename ) {
if ( file_exists( $filename ) ) { // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf
} elseif ( file_exists( ABSPATH . $filename ) ) {
$filename = ABSPATH . DIRECTORY_SEPARATOR . $filename;
} elseif ( file_exists( WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $filename ) ) {
$filename = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . $filename;
} elseif ( file_exists( WPINC . DIRECTORY_SEPARATOR . $filename ) ) {
$filename = WPINC . DIRECTORY_SEPARATOR . $filename;
} elseif ( file_exists( WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $filename ) ) {
$filename = WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $filename;
} else {
return false;
}
if ( function_exists( 'opcache_invalidate' ) ) {
return opcache_invalidate( $filename, true );
} elseif ( function_exists( 'apc_compile_file' ) ) {
return apc_compile_file( $filename );
}
return false;
}
}