oont-contents/plugins/wp-optimize/includes/class-wp-optimize-server-information.php
2025-02-10 13:57:45 +01:00

203 lines
4.8 KiB
PHP

<?php
if (!defined('ABSPATH')) die('No direct access allowed');
if (!class_exists('WP_Optimize_Server_Information')) :
class WP_Optimize_Server_Information {
/**
* Use WordPress core debug data helper
*
* @return array
*/
public function get_wp_debug_data() {
if (!class_exists('WP_Debug_Data')) {
if (!is_readable(ABSPATH.'wp-admin/includes/class-wp-debug-data.php')) {
return array(
'data' => array(
'label' => esc_html__('Please note that WordPress health information, including details about installed plugins and installation data, is only available from version 5.2 onwards.', 'wp-optimize'). ' ' . esc_html__('We recommend updating your WordPress version.', 'wp-optimize')
)
);
}
require_once(ABSPATH.'wp-admin/includes/class-wp-debug-data.php');
}
return WP_Debug_Data::debug_data();
}
/**
* Retrieve WPO cache size
*
* @return array
*/
public function get_cache_size() {
return WP_Optimize()->get_page_cache()->get_cache_size();
}
/**
* Retrieve WPO generated minify files and size
*
* @return string
*/
public function get_minify_size() {
$wpo_minify_options = wp_optimize_minify_config()->get();
if (!$wpo_minify_options['enabled']) return '';
$cache_path = WP_Optimize_Minify_Cache_Functions::cache_path();
return WP_Optimize_Minify_Cache_Functions::get_cachestats($cache_path['cachedir']);
}
/**
* Get logs and their sizes
*
* @return array
*/
public function get_logs_summary() {
$sizes = $this->get_logs(true);
$result = array();
foreach ($sizes as $filename => $filesize) {
$result[] = $filename . ': ' . size_format($filesize);
}
return $result;
}
/**
* Look around for WPO logs and fetch the content
*
* @param bool $paths_only Don't include the file contents in the response, just the file size
* @return array
*/
public function get_logs($paths_only = false) {
$upload_base = WP_Optimize_Utils::get_log_folder_path();
$cache_path = WP_Optimize_Minify_Cache_Functions::cache_path();
$log_file_patterns = array(
$upload_base => array(
'.*\.log$'
),
$cache_path['cachedir'] => array(
'.*\.json$'
)
);
$log_data = array();
foreach ($log_file_patterns as $path => $patterns) {
$files = $this->scandir($path);
foreach ($files as $file_full_path) {
foreach ($patterns as $pattern) {
$file = basename($file_full_path);
if (preg_match('|' . $pattern . '|', $file) && is_file($file_full_path)) {
$log_data[$file] = (true === $paths_only) ? filesize($file_full_path) : file_get_contents($file_full_path);
}
}
}
}
return $log_data;
}
/**
* Retrieve WPO cache configuration
*
* @return array
*/
public function get_cache_config() {
return WPO_Cache_Config::instance()->get();
}
/**
* Read main .htaccess file
*
* @return string
*/
public function get_webroot_htaccess() {
$file = trailingslashit(ABSPATH) . '.htaccess';
if (!is_readable($file)) return '';
return trim(file_get_contents($file));
}
/**
* Read uploads dir .htaccess file
*
* @return string
*/
public function get_upload_dir_htaccess() {
$uploads_dir = wp_get_upload_dir();
$file = trailingslashit($uploads_dir['basedir']) . '.htaccess';
if (!is_readable($file)) return '';
return trim(file_get_contents($file));
}
/**
* Iterate on uploads dir and read directories permissions
*
* @return array
*/
public function get_uploads_dir_permissions() {
$uploads_dir = wp_get_upload_dir();
if (!isset($uploads_dir['basedir']) || !is_dir($uploads_dir['basedir'])) {
return array();
}
$return = array(
'uploads' => decoct(fileperms($uploads_dir['basedir']) & 0777)
);
$uploads_content = $this->scandir($uploads_dir['basedir']);
foreach ($uploads_content as $element) {
if (is_dir($element)) {
$return['uploads/' . basename($element)] = decoct(fileperms($element) & 0777);
}
}
return $return;
}
/**
* Inspect directory with opendir, since glob might not be available in some systems
*
* @param string $path The actual path to scan
* @return array
*/
private function scandir($path) {
$content = array();
clearstatcache();
if (is_dir($path.'/') && ($handle = @opendir($path.'/'))) { // phpcs:ignore Generic.PHP.NoSilencedErrors.Discouraged -- suppress PHP warning in case of failure
while (false !== ($file = readdir($handle))) {
if ("." === $file || ".." === $file) continue;
$content[] = trailingslashit($path) . $file;
}
closedir($handle);
}
return $content;
}
/**
* Retrieve status of WebP redirection
*
* @return bool|null
*/
public function webp_redirection_status() {
$webp = WP_Optimize_WebP::get_instance();
$enabled = $webp->is_webp_enabled();
if (!$enabled) return false;
$is_possible = $webp->is_webp_redirection_possible();
return $is_possible ? true : null;
}
}
endif;