>

컬을 사용하여 원격 파일을 다운로드해야합니다.

내가 가지고있는 샘플 코드는 다음과 같습니다.

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$st = curl_exec($ch);
$fd = fopen($tmp_name, 'w');
fwrite($fd, $st);
fclose($fd);
curl_close($ch);

하지만 메모리를 먼저 읽기 때문에 큰 파일을 처리 할 수 ​​없습니다.

파일을 디스크로 직접 스트리밍 할 수 있습니까?


  • 답변 # 1

    <?php
    set_time_limit(0);
    //This is the file where we save the    information
    $fp = fopen (dirname(__FILE__) . '/localfile.tmp', 'w+');
    //Here is the file we are downloading, replace spaces with %20
    $ch = curl_init(str_replace(" ","%20",$url));
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    // write curl response to file
    curl_setopt($ch, CURLOPT_FILE, $fp); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    // get curl response
    curl_exec($ch); 
    curl_close($ch);
    fclose($fp);
    ?>
    
    

  • 답변 # 2

    이 편리한 기능을 사용합니다 :

    4094 바이트 단위로 다운로드하면 메모리가 가득 차지 않습니다

    function download($file_source, $file_target) {
        $rh = fopen($file_source, 'rb');
        $wh = fopen($file_target, 'w+b');
        if (!$rh || !$wh) {
            return false;
        }
        while (!feof($rh)) {
            if (fwrite($wh, fread($rh, 4096)) === FALSE) {
                return false;
            }
            echo ' ';
            flush();
        }
        fclose($rh);
        fclose($wh);
        return true;
    }
    
    

    사용법 :

        $result = download('http://url','path/local/file');
    
    

    그런 다음 모든 것이 정상인지 확인할 수 있습니다 :

        if (!$result)
             throw new Exception('Download error...');
    
    

  • 답변 # 3

    지정된 URL의 내용을 다운로드하려는 경우 아래 코드를 찾아 파일로 저장하십시오.

    <?php
    $ch = curl_init();
    /**
    * Set the URL of the page or file to download.
    */
    curl_setopt($ch, CURLOPT_URL,'http://news.google.com/news?hl=en&topic=t&output=rss');
    $fp = fopen('rss.xml', 'w+');
    /**
    * Ask cURL to write the contents to a file
    */
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_exec ($ch);
    curl_close ($ch);
    fclose($fp);
    ?>
    
    

    FTP 서버에서 파일을 다운로드하려면 php FTP 확장을 사용할 수 있습니다. 아래 코드를 찾으십시오 :

    <?php
    $SERVER_ADDRESS="";
    $SERVER_USERNAME="";
    $SERVER_PASSWORD="";
    $conn_id = ftp_connect($SERVER_ADDRESS);
    // login with username and password
    $login_result = ftp_login($conn_id, $SERVER_USERNAME, $SERVER_PASSWORD);
    $server_file="test.pdf" //FTP server file path 
    $local_file = "new.pdf"; //Local server file path 
    ##----- DOWNLOAD $SERVER_FILE AND SAVE TO $LOCAL_FILE--------##
    if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
        echo "Successfully written to $local_file\n";
    } else {
        echo "There was a problem\n";
    }
    ftp_close($conn_id);
    ?>
    
    

  • 답변 # 4

    와 이츠 비츠  다음 큰 파일을 다운로드하는 데 사용됩니다 curl  설정해야하는 기본 옵션입니다.

    CURLOPT_TIMEOUT  pdf/csv/image 등의 파일을 얻는 경우에 대비해야합니다.

    여기에서 더 자세한 내용을 볼 수 있습니다 (올바른 URL) Curl Doc

    해당 페이지에서 :

    CURLOPT_RETURNTRANSFER
    
    

  • 답변 # 5

    를 당신은 파일 시스템에 반환 다운로드 한 파일의 경로 모든 것이 잘 작동하는 경우에 임시 파일을 생성이 기능을 사용할 수 있습니다

    curl_setopt($request, CURLOPT_TIMEOUT, 300); //set timeout to 5 mins
    curl_setopt($request, CURLOPT_RETURNTRANSFER, true); // true to get the output as string otherwise false
    
    
    function getFileContents($url) { // Workaround: Save temp file $img = tempnam(sys_get_temp_dir(), 'pdf-'); $img .= '.' . pathinfo($url, PATHINFO_EXTENSION); $fp = fopen($img, 'w+'); $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); $result = curl_exec($ch); curl_close($ch); fclose($fp); return $result ? $img : false; }

  • 이전 .net - C #에서 양방향 1 대 1 사전
  • 다음 jquery - 자바 스크립트를 사용하여 링크를 만들려면 어떻게합니까?