使用PHP将文件上传到另一个PHP服务器

23

我不是在询问如何从浏览器将文件上传到PHP脚本,因为已经有很多教程了。我在询问以下问题:

我有一个PHP脚本,已经接收了用户的文件,并且该文件目前位于服务器1的硬盘上。我想使用常规的HTTP POST协议,将该文件从服务器1上传到服务器2上的一个PHP脚本,以便可以将服务器2上的PHP脚本编写为标准的文件上传处理程序。

我找不到任何教程,因为它们都涉及浏览器->服务器1。关于PHP上传的所有教程都讨论FTP,但我不想使用该协议。

请帮忙?

3个回答

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()

2
我只是需要再次为另一个项目使用它,并且我在我的新代码中犯了一个非常微妙的错误,以至于我不得不在这里发布它:当CURLOPT_POST设置为数组时,必须确保CURLOPT_POST,true在POSTFIELDS之前! - Tominator

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

哈哈,原创加一分 :-) - Tominator
4
我几年前写了这篇文章,当时我还很新手。现在我对自己当时的建议感到恐惧不安。请使用被接受的答案。 - bkulyk
没关系,我没有使用它,但正如我所说的那样,它是原创的 :-) - Tominator

2
您需要两个脚本。
第一个脚本会模拟浏览器行为,它将获取文件并将其发送到第二个脚本,第二个脚本会像普通的文件上传脚本一样处理它。
我猜您需要使用 "http_post_fields" 来编写第一个脚本,因为它似乎可以处理文件。 http://us2.php.net/manual/en/function.http-post-fields.php 祝您好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接