WP_Site_Health_Auto_Updates::test_all_files_writable()
Checks if core files are writable by the web user/group.
Return
(array|false) The test results if at least some of WordPress core files are writeable, or if a list of the checksums could not be retrieved from WordPress.org.<br> False if the core files are not writeable.
Source
File: wp-admin/includes/class-wp-site-health-auto-updates.php
public function test_all_files_writable() {
global $wp_filesystem;
require ABSPATH . WPINC . '/version.php'; // $wp_version; // x.y.z
$skin = new Automatic_Upgrader_Skin();
$success = $skin->request_filesystem_credentials( false, ABSPATH );
if ( ! $success ) {
return false;
}
WP_Filesystem();
if ( 'direct' !== $wp_filesystem->method ) {
return false;
}
// Make sure the `get_core_checksums()` function is available during our REST API call.
if ( ! function_exists( 'get_core_checksums' ) ) {
require_once ABSPATH . 'wp-admin/includes/update.php';
}
$checksums = get_core_checksums( classicpress_version_short(), 'en_US' );
$dev = classicpress_is_dev_install();
// There may not be checksums for development releases, so just skip the test if we can't find any.
if ( ! $checksums && $dev ) {
return false;
}
if ( ! $checksums ) {
$description = sprintf(
/* translators: %s: ClassicPress version. */
__( "Couldn't retrieve a list of the checksums for ClassicPress %s." ),
$cp_version
);
$description .= ' ' . __( 'This could mean that connections are failing to WordPress.org or ClassicPress.net.' );
return array(
'description' => $description,
'severity' => 'warning',
);
}
$unwritable_files = array();
foreach ( array_keys( $checksums ) as $file ) {
if ( str_starts_with( $file, 'wp-content' ) ) {
continue;
}
if ( ! file_exists( ABSPATH . $file ) ) {
continue;
}
if ( ! is_writable( ABSPATH . $file ) ) {
$unwritable_files[] = $file;
}
}
if ( $unwritable_files ) {
if ( count( $unwritable_files ) > 20 ) {
$unwritable_files = array_slice( $unwritable_files, 0, 20 );
$unwritable_files[] = '...';
}
return array(
'description' => __( 'Some files are not writable by ClassicPress:' ) . ' <ul><li>' . implode( '</li><li>', $unwritable_files ) . '</li></ul>',
'severity' => 'fail',
);
} else {
return array(
'description' => __( 'All of your ClassicPress files are writable.' ),
'severity' => 'pass',
);
}
}
Changelog
Version | Description |
---|---|
5.2.0 | Introduced. |