Похоже, что вы хотите, это passthru ()
В соответствии с документацией , она выведет вывод команды прямо обратно в браузер.
$ret_val = null;
header("Content-type: application/gzip");
passthru("mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip", $ret_code);
# the extra equals sign below makes sure $ret_val isn't null
if($ret_val !== 0)
echo "Failboat";
При этом это звучит как очень хрупкий способ делать резервные копии. Вам лучше сначала сохранить файл на диск и загрузить его отдельно. Если вы действительно хотите с этим справиться, попробуйте использовать tee, чтобы записать файл на диск при потоковой передаче его обратно в браузер (предупреждение, на самом деле это даже хуже)