2010-06-28 50 views
23

Tôi không hỏi về việc tải lên tệp từ trình duyệt lên tập lệnh php, có rất nhiều hướng dẫn về điều đó. Tôi hỏi về điều này:Tải tệp tin lên php lên máy chủ php khác

Tôi có tập lệnh php đã chấp nhận tệp từ người dùng và tệp hiện nằm trên đĩa cứng của máy chủ 1. Tôi muốn tải tệp từ máy chủ 1 lên php tập lệnh trên máy chủ 2, sử dụng giao thức đăng bài thường xuyên của Http, do đó, tập lệnh php trên máy chủ 2 có thể được viết dưới dạng trình xử lý tệp tải lên chuẩn.

Tôi không thể tìm thấy bất kỳ hướng dẫn nào trên internet, vì tất cả chúng đều nói về trình duyệt-> server1. Các hướng dẫn về php tải lên tất cả nói về ftp, nhưng tôi không muốn sử dụng giao thức đó.

Vui lòng trợ giúp?

Trả lời

30

Bạn có thể sử dụng CURL cho việc này. Một cái gì đó như thế này nên làm điều đó.

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, array('file' => '@/path/to/file.txt')); 
curl_setopt($ch, CURLOPT_URL, 'http://server2/upload.php'); 
curl_exec($ch); 
curl_close($ch); 

Sau đó, bạn có thể xử lý phần máy chủ2 dưới dạng tải lên tệp thông thường. Xem curl_setopt() để biết thêm thông tin về các tùy chọn đó.

+0

Cảm ơn, nó hoạt động ngay lập tức :-) – Tominator

+1

Tôi chỉ cần một lần nữa cho một dự án khác, và tôi đã thực hiện một lỗi trong mã mới của mình, tôi đã phải đăng nó ở đây: điều quan trọng là CURLOPT_POST, đúng TRƯỚC KHI POSTFIELDS khi được đặt thành một mảng! – Tominator

9

Bạn có thể sử dụng SOAP để gửi tệp từ một máy chủ đến máy chủ khác.

máy chủ nhận:

<?php 
$server = new Soap_Server(null, array('uri'=>'somerui')); 
$server->addFunction('receiveFile'); 
function receiveFile($file) { 
    file_put_contents('somepath', base64_decode($file)); 
} 
?> 

Gửi server:

<?php 
$client = new Soap_Client(null, array('uri'=>'somerui')); 
$client->receiveFile(base64_encode(file_get_contents('somepath')); 
?> 
+0

Hehe, một cộng một cho độc đáo :-) – Tominator

+4

Tôi đã viết cách đây nhiều năm, tôi vẫn còn khá mới. Bây giờ tôi rùng mình trong kinh dị mà tôi đề nghị điều này. Sử dụng câu trả lời được chấp nhận. – bkulyk

+0

Không phải lo lắng, tôi đã không sử dụng nó, nhưng nó là bản gốc như tôi đã nói :-) – Tominator

2

Bạn cần hai Scripts.

Kịch bản đầu tiên sẽ mô phỏng hành vi của trình duyệt, nó sẽ lấy một tệp và gửi tệp đó tới tập lệnh giây, sẽ xử lý nó giống như tập lệnh tải lên tệp thông thường.

Tôi đoán bạn phải sử dụng "http_post_fields" cho tập lệnh đầu tiên, có vẻ như để xử lý tệp. http://us2.php.net/manual/en/function.http-post-fields.php

Chúc may mắn.

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