PHP readfile vs. file_get_contents

Я использовал следующий код для генерации zip

// push to download the zip header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="'.$zip_name.'"'); readfile($zip_name); 

этот код работает нормально, но по неизвестным причинам не работал, пока я не попытался

 // push to download the zip header('Content-type: application/zip'); header('Content-Disposition: attachment; filename="'.$zip_name.'"'); echo file_get_contents($zip_name); 

Мне интересно узнать, что происходит в обоих случаях

Readfile будет считывать файл непосредственно в выходной буфер, а файл_get_contents будет загружать файл в память, когда вы эхо-результат, данные копируются из памяти в выходной буфер, эффективно используя в 2 раза память readfile.