2009-06-17 35 views
10

Tôi làm cách nào để lưu tệp bằng curl và PHP?Lưu tệp bằng curl và PHP

+2

bạn có chắc bạn cần cuộn tròn? là file_get_contents ("http://whatever.com") chưa đủ? –

+1

Tôi chắc rằng trên 50% trong số 14.000 lượt xem không thấy rằng 'file_get_contents' đủ – redolent

Trả lời

8

Bạn có thể sử dụng:

<?php 
// create a new cURL resource 
$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

// grab URL and pass it to the browser 
$out = curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 


$fp = fopen('data.txt', 'w'); 
fwrite($fp, $out); 
fclose($fp); 

?> 

Xem: http://jp2.php.net/manual/en/function.curl-exec.phphttp://us3.php.net/manual/en/function.fwrite.php

+2

Thao tác này sẽ thực hiện công việc cho các tệp nhỏ, nhưng nó tải toàn bộ tệp vào bộ nhớ trước khi lưu, và vì vậy bạn có thể sẽ gây tử vong ra khỏi bộ nhớ 'lỗi nếu tập tin lớn hơn giới hạn bộ nhớ của PHP. Câu trả lời của Haim Evgi sẽ truyền tải tệp một cách chính xác vào đĩa để tránh sự cố này. –

+0

Tôi 'curl_exec' thẳng vào' file_put_contents() '. Ít nhất, nó tiết kiệm 3 dòng mã. –

22

bạn đã muốn một cái gì đó như thế này?

function get_file($file, $local_path, $newfilename) 
{ 
    $err_msg = ''; 
    echo "<br>Attempting message download for $file<br>"; 
    $out = fopen($local_path.$newfilename,"wb"); 
    if ($out == FALSE){ 
     print "File not opened<br>"; 
     exit; 
    } 

    $ch = curl_init(); 

    curl_setopt($ch, CURLOPT_FILE, $out); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_URL, $file); 

    curl_exec($ch); 
    echo "<br>Error is : ".curl_error ($ch); 

    curl_close($ch); 
    //fclose($handle); 

}//end function 

Chức năng: nó một chức năng và chấp nhận ba thông số

get_file($file, $local_path, $newfilename) 

$file: là tên tập tin của đối tượng được lấy ra

$local_path: là con đường địa phương để các thư mục để lưu trữ đối tượng

$newfilename: là tên tệp mới trên hệ thống cục bộ

-3

Tôi nghĩ rằng curl có tùy chọn -o để ghi đầu ra vào một tệp thay vì stdout.

Sau khi bạn phải cung cấp tên của tệp đầu ra.

dụ:

 

curl -o path_to_the_file url 
+1

Đây là phiên bản * dòng lệnh * của curl, nhưng không phải là thư viện curl PHP. –

Các vấn đề liên quan