2010-06-28 136 views
23

我不問有關從瀏覽器上傳文件到php腳本的問題,這裏有很多教程。我在問這個問題:用php將文件上傳到另一臺php服務器

我有一個php腳本已經接受用戶的文件,並且該文件當前位於服務器1的硬盤上。我想將文件從服務器1上傳到php服務器2上的腳本,使用常規的Http post協議,因此服務器2上的php腳本可以寫爲標準的文件上傳處理程序。

我無法在互聯網上找到任何教程,因爲他們都談論browser-> server1。有關php上傳的教程都討論了ftp,但我不想使用該協議。

請幫忙?

回答

30

您可以使用CURL來做到這一點。像這樣的東西應該這樣做。

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

然後,您可以將server2部件作爲常規文件上載進行處理。有關這些選項的更多信息,請參閱curl_setopt()

+0

謝謝,它立即生效:-) – Tominator 2010-06-28 20:34:10

+1

我只是需要這又一個項目,我在我的新代碼中犯了一個錯誤,這是非常微妙的,我不得不在這裏發佈它:這是非常重要的CURLOPT_POST,真當POSTFIELDS被設置爲一個數組的時候! – Tominator 2014-03-12 12:07:04

9

您可以使用SOAP將文件從一臺服務器發送到另一臺服務器。

接收服務器:

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

發送服務器:

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

嘿嘿,原創性的加號之一:-) – Tominator 2010-06-28 20:34:45

+4

我這幾年寫的,我還是很新的。現在我驚恐地發抖,我提出了這個建議。使用接受的答案。 – bkulyk 2014-05-27 18:42:31

+0

不用擔心,我沒有使用它,但它是原來的,我說:-) – Tominator 2014-05-27 18:56:07

2

需要兩個腳本。

第一個腳本會模仿瀏覽器的行爲,它會把一個文件發送到秒腳本,它將像處理常規文件上傳腳本一樣處理它。

我猜你必須使用「http_post_fields」作爲第一個腳本,它似乎處理文件。 http://us2.php.net/manual/en/function.http-post-fields.php

祝你好運。

相關問題