codice:
header("Content-Disposition:attachment; filename=".$file_backup);
Questa istruzione dice con quale nome proporre al browser di salvare il "testo" che stai inviando al browser.... e nel tuo codice non stai inviando testo... se non quello che mette di default php probabilmente.
Il tuo codice deve diventare:
codice:
// con questo dici al browser che stai mandando uno stream di dati anzichè il text/html di default.
header('Content-type: application/octet-stream');
// qui dici con che nome salvare
header('Content-Disposition: attachment; filename="'.basename($file_backup).'"');
/* poi fai le tue valutazioni, non ho capito bene cosa fail con il tuo codice, ma semplicemente se sei sicuro che $file_backup contiene il backup devi semplicemente mandarlo in output al browser (potresti anche fare un echo di una stringa qualsiasi per fare in modo che questa venga proposta per il salvataggio in un file)
*/
readfile($file_backup);
/**
ci metti un die per essere sicuro che il tuo file non venga sporcato con altri dati (se il codice è corretto non è necessario perchè comunque non viene stampato + nulla però con questo stai sicuro.
**/
die;
ciao