Download file from URL using CURL
Give this a go
<?php $output_filename = "testfile.igc"; $host = "http://www.xcontest.org/track.php?t=2avxjsv1.igc"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $host); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_REFERER, "http://www.xcontest.org"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HEADER, 0); $result = curl_exec($ch); curl_close($ch); print_r($result); // prints the contents of the collected file before writing.. // the following lines write the contents to a file in the same directory (provided permissions etc) $fp = fopen($output_filename, 'w'); fwrite($fp, $result); fclose($fp);?>
#or if you want to put it within a loop for parsing several links... you need some functions.. here is a rough idea....
<?php function collect_file($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_VERBOSE, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_AUTOREFERER, false); curl_setopt($ch, CURLOPT_REFERER, "http://www.xcontest.org"); curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_HEADER, 0); $result = curl_exec($ch); curl_close($ch); return($result); } function write_to_file($text,$new_filename){ $fp = fopen($new_filename, 'w'); fwrite($fp, $text); fclose($fp); } // start loop here $new_file_name = "testfile.igc"; $url = "http://www.xcontest.org/track.php?t=2avxjsv1.igc"; $temp_file_contents = collect_file($url); write_to_file($temp_file_contents,$new_file_name) // end loop here?>
@Chris' answer works, but this seems to work better to download very large files without running out of memory, since it doesn't download the whole file into a variable before writing to disk:
$file_url = 'http://www.test.com/images/avatar.png';$destination_path = "downloads/avatar.png";$fp = fopen($destination_path, "w+");$ch = curl_init($file_url);curl_setopt($ch, CURLOPT_FILE, $fp);curl_exec($ch);$st_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);curl_close($ch);fclose($fp);if($st_code == 200) echo 'File downloaded successfully!';else echo 'Error downloading file!';
Source: https://www.kodingmadesimple.com/2018/02/php-download-file-from-url-curl.html
I had some issues making the (File Download Dialog Box) show up when using Curl until i did this :
// $ch = curl_init();// curl_setopt($ch, CURLOPT_URL, $url); // Other Curl options ....$output = curl_exec($ch);if (isset($_POST["downloadExcelFile"])){ // in my code the "downloadExcelFile" field // is sent when i'm trying to download an excel file header('Content-Type: application/vnd.ms-excel'); header('Content-Disposition: attachment;filename="file.xls"'); header('Cache-Control: max-age=0'); $fp = fopen("php://output", 'w'); fwrite($fp, $output ); fclose($fp); }