file_put_contents($file, fopen($url, 'r'));
Идея в том, что fopen создаёт поток, и этот поток передаётся в file_put_contents. Соответственно этот поток не считывается в память весь, а буферизуется и сбрасывается на диск по мере вычитывания. См. https://php.net/file_put_contents
Если data является потоковым ресурсом (stream), оставшийся буфер этого потока будет скопирован в указанный файл.