2011-08-09 43 views
5

Tôi đang sử dụng cURL để chuyển tệp hình ảnh từ máy chủ này sang máy chủ khác bằng cách sử dụng PHP. Đây là mã cURL tôi:Tải lên nhiều tệp với cURL

// Transfer the original image and thumbnail to our storage server 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_VERBOSE, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_URL, 'http://' . $server_data['hostname'] . '.localhost/transfer.php'); 
curl_setopt($ch, CURLOPT_POST, true); 
$post = array(
    'upload[]' => '@' . $tmp_uploads . $filename, 
    'upload[]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
$resp = curl_exec($ch); 

Đây là mã trong transfer.php trên máy chủ Tôi đang tải lên:

if($_FILES && $_POST['salt'] == 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q') 
{ 
    // Save the files 
    foreach($_FILES['upload']['error'] as $key => $error) 
    { 
     if ($error == UPLOAD_ERR_OK) 
     { 
      move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key]); 
     } 
    } 
} 

Tất cả dường như làm việc, ngoài một lỗi logic nhỏ. Chỉ có một tệp đang được lưu trên máy chủ mà tôi đang chuyển sang. Điều này có lẽ là vì tôi đang gọi cả hai hình ảnh upload[] trong mảng bài đăng của tôi, nhưng tôi không biết cách khác để làm điều đó. Tôi đang cố bắt chước điều này:

<input type="file" name="upload[]" /> 
<input type="file" name="upload[]" /> 

Bất kỳ ai biết cách tôi có thể làm việc này? Cảm ơn!

Trả lời

0

Bản thân mã có vẻ ổn, nhưng tôi không biết về thư mục đích di chuyển() của bạn. Bạn đang sử dụng tên tệp thô được cung cấp bởi ứng dụng khách (đó là tập lệnh curl của bạn). Bạn đang sử dụng tên tệp được tải lên ban đầu (như được chỉ định trong tập lệnh curl) làm mục tiêu di chuyển, không có kiểm tra ghi đè và không có dữ liệu đường dẫn. Nếu hai tệp được tải lên có cùng tên tệp, bạn sẽ ghi đè hình ảnh được xử lý đầu tiên với bất kỳ hình ảnh nào được xử lý thứ hai bằng PHP.

Hãy thử đặt một số lỗi xung quanh di chuyển() lệnh:

if (!move_uploaded_file($_FILES['upload']['tmp_name'][$key], $_FILES['upload']['name'][$key])) { 
    echo "Unable to move $key/"; 
    echo $_FILES['upload']['tmp_name'][$key]; 
    echo ' to '; 
    echo $_FILES['upload']['name'][$key]; 
} 

(tôi chia vang lên nhiều dòng cho dễ đọc).

+0

Điều đó không phun ra bất cứ điều gì, có nghĩa là di chuyển không sao. Thư mục đích là cùng thư mục với kịch bản transfer.php. Đây chỉ là một máy chủ lưu trữ, không có cấu trúc thư mục. – Josh

+0

thực hiện một 'print_r ($ _ FILES)' và xem chính xác những gì sắp tới cho tên tập tin và những thứ tương tự. Ngay cả khi cả hai bên đều nằm trong tầm kiểm soát của bạn, hãy sử dụng tên tệp trực tiếp khi bạn khiến tôi lo lắng. –

3

đây là lỗi của bạn trong cuộc gọi curl ...

var_dump($post) 

bạn đang clobbering các mục mảng của $ post mảng của bạn vì các dây chính là giống hệt nhau ...

thực hiện thay đổi này

$post = array(
    'upload[0]' => '@' . $tmp_uploads . $filename, 
    'upload[1]' => '@' . $tmp_uploads . $thumbname, 
    'salt' => 'q8;EmT(Vx*Aa`fkHX:up^WD^^b#<Lm:Q' 
); 
+4

xem xét thay đổi muối của bạn ngay bây giờ mà bạn đã xuất bản nó ... –

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