fsockopen, fopen: fread()+fwrite() loop, easy
streams: stream_copy_to_stream($http_handle, $new_file_handle);
HTTP Extension: I cant see a case there which allows for streaming directly to files, So will probably have to read into memory, and write it out.
cURL: Can use CURLOPT_FILE to specify where to write the output, CURLOPT_WRITEHEADER or CURLOPT_HEADERFUNCTION should be able to be used to capture the header data
Some of the classes might be able to be unset or destroyed better to decrease memory usage after a request is made.