file_put_contents($file, fopen($url, 'r'));
Идея в том, что fopen создаёт поток, и этот поток передаётся в file_put_contents. Соответственно этот поток не считывается в память весь, а буферизуется и сбрасывается на диск по мере вычитывания. См. https://php.net/file_put_contents
Если data является потоковым ресурсом (stream), оставшийся буфер этого потока будет скопирован в указанный файл.
Что-то неведомое не может добавлять. Вы случайно не какой-нибудь фреймворк на основе symfony роутера используете? Symfony, Silex, Lavarel, Lumen? Я с ним тоже намучался с такой же проблемой, с ними необходимо аккуратно прописывать роутинг, чтобы такого не было. Конкретнее не скажу, зависит от способа реализации