логируете всё на стороне php (лог ошибок посмотреть)
берётё tcpdump, сохраняете дамп, анализируете в Wireshark
одна из очевидных ошибок - пытаетесь всё забрать в оперативную память (отдаёте в переменную), а надо отдавать указатель на файл. CURLOPT_RETURNTRANSFER в случае больших файлов - вреден.
Пример:
$out = fopen($local_path.$newfilename,"wb");
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $out);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $file);
curl_exec($ch);
curl_close($ch);