2015-07-04 19 views
25

Có một tệp "/home/test.mp4" trong máy cục bộ của tôi,Cách tải tệp lên thư mục đích bằng curl?

Tôi muốn tải tệp đó lên /var/www/ok.mp4 (tên đã thay đổi khi tải lên). Tất cả tệp nguồn và tệp đích đều nằm trong máy cục bộ.

Làm cách nào để sửa mã một phần của tôi, thêm thứ gì đó hoặc thay đổi thứ gì đó?

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

?> 

Nghĩ Ram Sharma, mã đã được thay đổi như sau:

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

Một thông báo lỗi xảy ra:

Nó hoạt động!
Đây là trang web mặc định cho máy chủ này.
Phần mềm máy chủ web đang chạy nhưng chưa có nội dung nào được thêm vào.

Tôi đã thử nghiệm với ftp_put, code1 hoạt động tốt.

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

File d:/upload.sql trong pc địa phương của tôi có thể được tải lên vào my_ftp_ip/public_html/upload_ftp_put.sql với code1.
Bây giờ tôi đã viết lại nó với curl thành mã2.

code2:

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

Sản lượng thông tin lỗi là 6 .Why không thể tải lên tập tin địa phương của tôi vào ftp với curl Làm thế nào để sửa chữa nó?

+1

Nếu trên hệ thống tệp cục bộ, tại sao không chỉ ['copy ($ src, $ dest)'] (http://php.net/copy)? – mario

+0

Tại sao '/ home /' có thể truy cập được trên mỗi HTTP? Và '_POSTFIELDS' phải làm gì? – mario

+0

Bây giờ tôi không có vps để kiểm tra mã, giả định tất cả các nguồn và tập tin mục tiêu trong máy địa phương có thể được thay đổi khi bạn cho tôi mã đúng. –

Trả lời

3

Đó là một lỗi ở mức độ thấp .

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

thử một cái gì đó như thế này và tôi cảm thấy thay vì đường dẫn thư mục máy chủ nó sẽ là url http.

// 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

Sử dụng copy():

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

Nó không có ý nghĩa để chạy các tập tin thông qua ngăn xếp mạng (đó là những gì cURL không), trên bất kỳ giao thức (HTTP, FTP, ...), khi thao tác có thể được thực hiện cục bộ, thông qua hệ thống tệp. Sử dụng mạng phức tạp hơn và dễ xảy ra lỗi.

0

Cố gắng xác định loại MIME của tập tin gửi như thế này

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

Mã này có thể giúp bạn:

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

Tôi muốn đặt thứ gì đó vào url từ thư mục cục bộ, không phải để tải url vào thư mục của tôi! –

0

Mã bạn đăng là cho phía khách hàng. Nếu bạn muốn tải lên tệp bằng HTTP, máy chủ HTTP của bạn phải có khả năng xử lý yêu cầu tải lên này và lưu tệp mà bạn muốn. "Thông báo lỗi" có thể là trang web mặc định của máy chủ.

mẫu mã server-side trong PHP, để bạn tham khảo:

<?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/ 

Bạn cũng sẽ cần một trang mà có thể xử lý yêu cầu này (POST)

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