Download file from URL using CURL Download file from URL using CURL curl curl

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);    }