我想将两个不同的文件上传到位于两个不同位置的两个不同服务器。
我有一个图像文件要上传到托管 PHP 脚本的服务器上,另一个视频文件要上传到不在同一台服务器上的其他服务器上。
有没有可能这样做?如果可能的话,谁能解释我如何实现这一目标?
我想将两个不同的文件上传到位于两个不同位置的两个不同服务器。
我有一个图像文件要上传到托管 PHP 脚本的服务器上,另一个视频文件要上传到不在同一台服务器上的其他服务器上。
有没有可能这样做?如果可能的话,谁能解释我如何实现这一目标?
这对于 HTML 表单是不可能的 - 该action
属性只允许指定单个 URL。
您在这里有几个选择:
使用 JavaScript 创建两个<iframe>
s,在其中填充您要提交的数据<form>
,然后调用.submit()
每个表单。由于您提到这两个位置位于不同的服务器上,我将假设它们也位于不同的域上 - 因此您将在至少其中一个表单上遇到同源策略的问题。出于这个原因,以及很多用户在他们的浏览器中关闭了 JavaScript 的事实,我建议尽可能避免使用此选项。
让服务器上的 PHP 脚本获取$_POST
数据并将包含该信息的 POST 请求发送到另一台服务器。例如,这可以通过 PHP 的cURL 扩展轻松完成。这可以按如下方式完成:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://...');
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_POST));
curl_exec($ch);
curl_close($ch);
有很多方法可以解决这个问题。例如,您可以有 2 个表单,每个服务器一个,例如:
<form action="http://server1/upload_server1.php" method=post ...>
</form>
和
<form action="http://server2/upload_server2.php" method=post ...>
</form>
但这不会是用户友好的。
您还可以将所有文件上传到其中一台服务器,并使用例如 php ftp 库将您想要的文件传输到第二台服务器:
http://php.net/manual/en/book.ftp.php
但是在服务器之间传输文件的时间可能会有开销。
当然,您会在这里找到更多答案。选一个你最喜欢的:)