Skip to content

Commit 0434a0f

Browse files
Copilotswissspidy
andcommitted
Add error handling for require_once statements in core install methods
Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com>
1 parent 80b2114 commit 0434a0f

1 file changed

Lines changed: 60 additions & 4 deletions

File tree

src/Core_Command.php

Lines changed: 60 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -659,7 +659,21 @@ function wp_new_blog_notification() {
659659
add_filter( 'send_site_admin_email_change_email', '__return_false' );
660660
}
661661

662-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
662+
$upgrade_file = ABSPATH . 'wp-admin/includes/upgrade.php';
663+
if ( ! file_exists( $upgrade_file ) ) {
664+
WP_CLI::error( "WordPress installation is incomplete. The file '{$upgrade_file}' is missing." );
665+
}
666+
667+
// Suppress errors from require_once and catch them for better error messages.
668+
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentional to provide better error messages.
669+
if ( ! @require_once $upgrade_file ) {
670+
$error = error_get_last();
671+
if ( $error ) {
672+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}': {$error['message']}" );
673+
} else {
674+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}'." );
675+
}
676+
}
663677

664678
$defaults = [
665679
'title' => '',
@@ -715,7 +729,21 @@ function wp_new_blog_notification() {
715729
private function multisite_convert_( $assoc_args ) {
716730
global $wpdb;
717731

718-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
732+
$upgrade_file = ABSPATH . 'wp-admin/includes/upgrade.php';
733+
if ( ! file_exists( $upgrade_file ) ) {
734+
WP_CLI::error( "WordPress installation is incomplete. The file '{$upgrade_file}' is missing." );
735+
}
736+
737+
// Suppress errors from require_once and catch them for better error messages.
738+
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentional to provide better error messages.
739+
if ( ! @require_once $upgrade_file ) {
740+
$error = error_get_last();
741+
if ( $error ) {
742+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}': {$error['message']}" );
743+
} else {
744+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}'." );
745+
}
746+
}
719747

720748
$domain = self::get_clean_basedomain();
721749
if ( 'localhost' === $domain && ! empty( $assoc_args['subdomains'] ) ) {
@@ -1211,7 +1239,21 @@ public function update( $args, $assoc_args ) {
12111239
&& ( $update->version !== $wp_version
12121240
|| Utils\get_flag_value( $assoc_args, 'force' ) ) ) {
12131241

1214-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
1242+
$upgrade_file = ABSPATH . 'wp-admin/includes/upgrade.php';
1243+
if ( ! file_exists( $upgrade_file ) ) {
1244+
WP_CLI::error( "WordPress installation is incomplete. The file '{$upgrade_file}' is missing." );
1245+
}
1246+
1247+
// Suppress errors from require_once and catch them for better error messages.
1248+
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentional to provide better error messages.
1249+
if ( ! @require_once $upgrade_file ) {
1250+
$error = error_get_last();
1251+
if ( $error ) {
1252+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}': {$error['message']}" );
1253+
} else {
1254+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}'." );
1255+
}
1256+
}
12151257

12161258
if ( $update->version ) {
12171259
WP_CLI::log( "Updating to version {$update->version} ({$update->locale})..." );
@@ -1371,7 +1413,21 @@ public function update_db( $args, $assoc_args ) {
13711413
}
13721414
WP_CLI::success( "WordPress database upgraded on {$success}/{$total} sites." );
13731415
} else {
1374-
require_once ABSPATH . 'wp-admin/includes/upgrade.php';
1416+
$upgrade_file = ABSPATH . 'wp-admin/includes/upgrade.php';
1417+
if ( ! file_exists( $upgrade_file ) ) {
1418+
WP_CLI::error( "WordPress installation is incomplete. The file '{$upgrade_file}' is missing." );
1419+
}
1420+
1421+
// Suppress errors from require_once and catch them for better error messages.
1422+
// phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged -- Intentional to provide better error messages.
1423+
if ( ! @require_once $upgrade_file ) {
1424+
$error = error_get_last();
1425+
if ( $error ) {
1426+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}': {$error['message']}" );
1427+
} else {
1428+
WP_CLI::error( "Failed to load WordPress installation file '{$upgrade_file}'." );
1429+
}
1430+
}
13751431

13761432
/**
13771433
* @var string $wp_current_db_version

0 commit comments

Comments
 (0)