I'm writing because I see that this thread, even though old, it still is pretty up-to-date with the situation. The readfile method works perfectly, however, I need a way to force the download on the user and make them download the file straight from the external server. Whenever I am trying to use: header('Content-Disposition:attachment;bla bla bla without readfile I download the file, however it is 0 bytes. I then thought that maybe the browser did not understand how many bytes to download, so I calculated the file size of the remote file and sent another header along the way like: header("Content-length: $video_size"); Has anyone managed to successfully got this to work without the use of readfile and not get an empty zero file?