Download file from URL using CURL

后端 未结 3 1112
一整个雨季
一整个雨季 2020-12-16 02:28

I try to download file using a php-script from an URL like the following:

http://www.xcontest.org/track.php?t=2avxjsv1.igc

The code I use l

相关标签:
3条回答
  • 2020-12-16 02:58

    @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

    0 讨论(0)
  • 2020-12-16 03:07

    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
    ?>
    
    0 讨论(0)
  • 2020-12-16 03:16

    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);
        }
    
    0 讨论(0)
提交回复
热议问题