@@ -631,11 +631,44 @@ private function pre_backup_check() {
631631 EE ::debug ( 'Free space: ' . $ free_space );
632632
633633 if ( $ site_size > $ free_space ) {
634- EE ::error ( 'Not enough disk space to take backup. Please free up some space and try again. ' );
634+ $ error_message = $ this ->build_disk_space_error_message ( 'backup ' , $ site_size , $ free_space );
635+
635636 $ this ->fs ->remove ( EE_BACKUP_DIR . '/ ' . $ this ->site_data ['site_url ' ] . '.lock ' );
637+ EE ::error ( $ error_message );
636638 }
637639 }
638640
641+ /**
642+ * Build a disk space error message for backup/restore operations.
643+ *
644+ * @param string $operation The operation name ('backup' or 'restore').
645+ * @param int $required_space The required disk space in bytes.
646+ * @param int $free_space The available free space in bytes.
647+ *
648+ * @return string The formatted error message.
649+ */
650+ private function build_disk_space_error_message ( $ operation , $ required_space , $ free_space ) {
651+ $ additional_space = $ required_space - $ free_space ;
652+ $ required_formatted = $ this ->format_bytes ( $ required_space );
653+ $ available_formatted = $ this ->format_bytes ( $ free_space );
654+ $ needed_formatted = $ this ->format_bytes ( $ additional_space );
655+
656+ return sprintf (
657+ "Not enough disk space to take %s. \n" .
658+ "Required: %s (%s bytes) \n" .
659+ "Available: %s (%s bytes) \n" .
660+ "Additional space needed: %s (%s bytes) \n" .
661+ "Please free up some space and try again. " ,
662+ $ operation ,
663+ $ required_formatted ,
664+ number_format ( $ required_space ),
665+ $ available_formatted ,
666+ number_format ( $ free_space ),
667+ $ needed_formatted ,
668+ number_format ( $ additional_space )
669+ );
670+ }
671+
639672 private function check_and_install ( $ command , $ name ) {
640673 $ status = EE ::exec ( "command -v $ command " );
641674 if ( ! $ status ) {
@@ -669,9 +702,32 @@ private function pre_restore_check() {
669702 EE ::debug ( 'Remote backup size: ' . $ remote_size );
670703
671704 $ free_space = disk_free_space ( EE_BACKUP_DIR );
705+ if ( false === $ free_space ) {
706+ EE ::error ( 'Unable to determine free disk space for backup directory. ' );
707+ }
672708
673709 if ( $ remote_size > $ free_space ) {
674- EE ::error ( 'Not enough disk space to restore backup. Please free up some space and try again. ' );
710+ $ required_space = $ remote_size ;
711+ $ additional_space = $ required_space - $ free_space ;
712+ $ required_formatted = $ this ->format_bytes ( $ required_space );
713+ $ available_formatted = $ this ->format_bytes ( $ free_space );
714+ $ needed_formatted = $ this ->format_bytes ( $ additional_space );
715+
716+ $ error_message = sprintf (
717+ "Not enough disk space to restore backup. \n" .
718+ "Required: %s (%s bytes) \n" .
719+ "Available: %s (%s bytes) \n" .
720+ "Additional space needed: %s (%s bytes) \n" .
721+ "Please free up some space and try again. " ,
722+ $ required_formatted ,
723+ number_format ( $ required_space ),
724+ $ available_formatted ,
725+ number_format ( $ free_space ),
726+ $ needed_formatted ,
727+ number_format ( $ additional_space )
728+ );
729+
730+ EE ::error ( $ error_message );
675731 }
676732
677733
@@ -728,6 +784,18 @@ private function pre_restore_check() {
728784 }
729785
730786
787+ private function format_bytes ( $ bytes , $ precision = 2 ) {
788+ $ units = [ 'B ' , 'KB ' , 'MB ' , 'GB ' , 'TB ' ];
789+
790+ $ bytes = max ( $ bytes , 0 );
791+ $ pow = floor ( ( $ bytes ? log ( $ bytes ) : 0 ) / log ( 1024 ) );
792+ $ pow = min ( $ pow , count ( $ units ) - 1 );
793+
794+ $ size = $ bytes / pow ( 1024 , $ pow );
795+
796+ return round ( $ size , $ precision ) . ' ' . $ units [ $ pow ];
797+ }
798+
731799 private function dir_size ( string $ directory ) {
732800 $ size = 0 ;
733801
0 commit comments