2009-06-17 31 views
10

Come posso salvare un file usando curl e PHP?Salvare il file usando curl e PHP

+2

Sei certo bisogno di arricciare? è file_get_contents ("http://whatever.com") non abbastanza? –

+1

Sono sicuro che oltre il 50% delle 14.000 visualizzazioni non ha rilevato che 'file_get_contents' è stato sufficiente – redolent

risposta

8

È possibile utilizzare:

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

?> 

See: http://jp2.php.net/manual/en/function.curl-exec.php e http://us3.php.net/manual/en/function.fwrite.php

+2

Questo farà il lavoro per i file di piccole dimensioni, ma carica l'intero file in memoria prima di salvare, e quindi probabilmente si danneggerà ' errori di memoria esaurita se il file è più grande del limite di memoria di PHP. La risposta di Haim Evgi trasmette correttamente il file su disco che evita questo problema. –

+0

I 'curl_exec' dritto in' file_put_contents() '. Almeno, salva 3 righe di codice. –

22

volevi qualcosa di simile?

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 

Funzionalità: suoi una funzione e accetta tre parametri

get_file($file, $local_path, $newfilename) 

$file: è il nome dell'oggetto da recuperare

$local_path: è il percorso locale della directory per memorizzare l'oggetto

$newfilename: è il nuovo nome file sul sistema locale

-3

Penso che il ricciolo abbia un'opzione -o per scrivere l'output su un file invece che sullo stdout.

Dopo -o è necessario fornire il nome del file di output.

esempio:

 

curl -o path_to_the_file url 
+1

Questo è per la * command-line * versione di curl, ma non la libreria di curl di PHP. –