2015-07-04 17 views
25

C'è un file "/home/test.mp4" nella mia macchina locale,Come caricare il file nella directory di destinazione con curl?

voglio caricarlo nella /var/www/ok.mp4 (il nome è cambiato quando ha caricato). Tutti i file di origine e di destinazione si trovano nel computer locale.

Come risolvere il mio codice parziale, aggiungere qualcosa o modificare qualcosa?

<?php 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string); 
curl_exec($ch); 

?> 

Pensate a Ram Sharma, il codice è stato cambiato come il seguente:

<?php 
$request = curl_init('http://127.0.0.1/'); 
curl_setopt($request, CURLOPT_POST, true); 
curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('/home/test.mp4') 
    )); 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($request); 
// close the session 
curl_close($request); 
?> 

Un messaggio di errore si verifica:

funziona!
Questa è la pagina Web predefinita per questo server.
Il software del server Web è in esecuzione ma non è stato ancora aggiunto alcun contenuto.

Ho un test con ftp_put, codice1 funziona correttamente.

code1:

<?php 
    set_time_limit(0); 
    $host = 'xxxx'; 
    $usr = 'yyyy'; 
    $pwd = 'zzzz'; 
    $src = 'd:/upload.sql'; 
    $ftp_path = '/public_html/'; 
    $des = 'upload_ftp_put.sql'; 
    $conn_id = ftp_connect($host, 21) or die ("Cannot connect to host"); 
    ftp_login($conn_id, $usr, $pwd) or die("Cannot login"); 
    $upload = ftp_put($conn_id, $ftp_path.$des, $src, FTP_ASCII); 
    print($upload); 
?> 

Il file di d:/upload.sql nel mio pc locale possono essere caricati in my_ftp_ip/public_html/upload_ftp_put.sql con code1.
Ora lo rewite con curl in code2.

Codice2:?

<?php 
    set_time_limit(0); 
    $ch = curl_init(); 
    $host = 'xxxx'; 
    $usr = 'yyyy'; 
    $pwd = 'zzzz'; 
    $src = 'd:/upload.sql'; 
    $ftp_path = '/public_html'; 
    $dest = 'upload_curl.sql'; 
    $fp = fopen($src, 'r'); 
    curl_setopt($ch, CURLOPT_URL, 'ftp://user:[email protected]/'.$ftp_path .'/'. $dest); 
    curl_setopt($ch, CURLOPT_UPLOAD, 1); 
    curl_setopt($ch, CURLOPT_INFILE, $fp); 
    curl_setopt($ch, CURLOPT_INFILESIZE, filesize($src)); 
    curl_exec ($ch); 
    $error_no = curl_errno($ch); 
    print($error_no); 
    curl_close ($ch); 
?> 

Le informazioni errore di uscita è 6 .Perché non può caricare il mio file locale nella ftp con l'arricciatura Come risolvere il problema?

+1

Se si trova già nel filesystem locale, perché non solo ['copy ($ src, $ dest)'] (http://php.net/copy)? – mario

+0

Perché '/ home /' essere accessibile per HTTP comunque? E cosa dovevano fare i '_POSTFIELDS'? – mario

+0

Ora non ho vps per testare il codice, l'ipotesi che tutto il file sorgente e di destinazione nel computer locale possa essere cambiato quando mi dai il codice giusto. –

risposta

3

Si tratta di un errore di basso livello .

curl_setopt($ch, CURLOPT_URL, "ftp://$usr:[email protected]$host$ftp_path/$dest"); 
1

provare qualcosa come questo e sento che invece del percorso della directory del server sarebbe http url.

// initialise the curl request 
$request = curl_init('http://example.com/'); 
// send a file 
curl_setopt($request, CURLOPT_POST, true); 
curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('test.txt') 
    )); 

// output the response 
curl_setopt($request, CURLOPT_RETURNTRANSFER, true); 
echo curl_exec($request); 
// close the session 
curl_close($request); 
8

Uso copy():

copy('/home/test.mp4', '/var/www/ok.mp4'); 

Non ha senso per eseguire il file attraverso lo stack di rete (che è quello che fa cURL), su qualsiasi protocollo (HTTP, FTP, ...), quando la manipolazione può essere eseguita localmente, tramite il file system. L'utilizzo della rete è più complicato e soggetto a errori.

0

tenta di specificare il tipo MIME del file inviato come questo

curl_setopt(
    $request, 
    CURLOPT_POSTFIELDS, 
    array(
     'file' => '@' . realpath('/home/test.mp4') . ';type=video/mp4' 
    )); 
1

Questo codice potrebbe aiutare:

<?php 
    $rCURL = curl_init(); 
    curl_setopt($rCURL, CURLOPT_URL, 'http://www.google.com/images/srpr/logo11w.png'); 
    curl_setopt($rCURL, CURLOPT_HEADER, 0); 
    curl_setopt($rCURL, CURLOPT_RETURNTRANSFER, 1); 

    $aData = curl_exec($rCURL); 
    curl_close($rCURL); 
    file_put_contents('bla.jpeg', $aData); 
    // file_put_contents('my_folder/bla.jpeg', $aData); /*You can use this too*/ 
+0

Voglio mettere qualcosa in un url dalla directory locale, non scaricare un URL nella mia directory! –

0

Il codice che hai postato è per il lato client. Se si desidera caricare un file utilizzando HTTP, il server HTTP deve essere in grado di gestire questa richiesta di caricamento e salvare il file dove si desidera. Il "messaggio di errore" è probabilmente la pagina Web predefinita del server.

Campione codice lato server in PHP, per il vostro riferimento:

<?php 
if ($_FILES) { 
    $filename = $_FILES['file']['name']; 
    $tmpname = $_FILES['file']['tmp_name']; 
    if (move_uploaded_file($tmpname,'/var/www/ok.mp4')) { 
     print_r('ok'); 
    } else { 
     print_r('failure'); 
    } 
} 
-3
curl -X POST -F "[email protected]" http://example.com/ 

Avrete anche bisogno di una pagina in grado di elaborare la richiesta (POST)

Problemi correlati