Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 可以从客户端';是否将计算机连接到承载表单的Web服务器外部的服务器?_Php_Jquery_File_Cross Domain_Uploading - Fatal编程技术网

Php 可以从客户端';是否将计算机连接到承载表单的Web服务器外部的服务器?

Php 可以从客户端';是否将计算机连接到承载表单的Web服务器外部的服务器?,php,jquery,file,cross-domain,uploading,Php,Jquery,File,Cross Domain,Uploading,要设置该场景,有三台机器:(1)客户端机器,(2)Web服务器,(3)和一台文件存储服务器。这三台机器不在同一局域网内,也不在同一域内。Web服务器使用PHP运行Apache,存储服务器也使用PHP运行IIS7 我有一个网页——托管在Web服务器上——包含一个文件上传模块。当用户从该网页上载文件时,我希望该文件直接存储到存储服务器上,而不是web服务器本身。我希望避免通过cURL或类似“scp”的系统级命令将文件从Web服务器传输到存储服务器,因为这似乎是对网络资源和用户时间的浪费 这是否可以安

要设置该场景,有三台机器:(1)客户端机器,(2)Web服务器,(3)和一台文件存储服务器。这三台机器不在同一局域网内,也不在同一域内。Web服务器使用PHP运行Apache,存储服务器也使用PHP运行IIS7

我有一个网页——托管在Web服务器上——包含一个文件上传模块。当用户从该网页上载文件时,我希望该文件直接存储到存储服务器上,而不是web服务器本身。我希望避免通过cURL或类似“scp”的系统级命令将文件从Web服务器传输到存储服务器,因为这似乎是对网络资源和用户时间的浪费

这是否可以安全地实现,推荐的实现方式是什么

我确实发现这是可行的,但在遵循设置跨域上载的说明后,我从浏览器的调试控制台中得到一个错误,其内容如下:

XMLHttpRequest无法加载
http://storageserver.com/scripts/process_uploads.php
。来源<代码>http://webserver.com是访问控制允许原点不允许的

虽然我意识到这不是最安全的代码,但为了排除故障,我在process_uploads.php脚本中添加了以下内容:

标题('Access-Control-Allow-Origin:')

为了澄清起见,以下是我编写表单元素的方式,该元素由jQuery文件上载插件解析:

<form id="fileupload" action="http://storageserver.com:8080/scripts/process_uploads.php" method="POST" enctype="multipart/form-data">


是否有人成功实现了跨域文件上载?如果是这样的话,你能解释一下什么可能是一个健壮的解决方案吗。

我建议你购买一台时间机器,可以追溯到几年前,那时网络是一个更值得信任的地方,浏览器无法抵御这类事情。跨域规则似乎每隔几个月就会改变一次。如果可以的话,你最好避开那罐虫子

我看到两种选择,都不好。毫无疑问,还有更多

首先:将表单提交到文件服务器,并让它将表单提交到web服务器

这在很大程度上取决于两台服务器之间的可靠连接。您说过不想将文件从web服务器复制到文件管理器。因此,将数据移到另一个方向。与向另一个方向复制文件相比,只需几个字节的表单就不那么重要了。因此,将整个表单提交到文件服务器,并让PHP表单处理程序将非文件部分(包括源IP和会话标识符)提交到web服务器。您甚至不需要在文件服务器上存储表单数据,只要让它将web服务器的结果转发回浏览器即可。在设计时不要忘记考虑认证和安全性。

第二:使用JavaScript或Flash上传两个表单

将非文件表单内容放在一个表单中,将文件放在单独的表单中。捕获一个表单的提交,并让它同时提交另一个表单(到另一个服务器)。这是一个糟糕的解决方案,因为它依赖浏览器上的JavaScript,而浏览器并不总是存在JavaScript。(你可以要求它来破坏你的网站,但我不推荐。)既然你已经在使用jQuery,你也许可以自己想出一个解决方案

我不知道你在Flash中是怎么做到的,但我相信这是可能的。我同样确信你不应该在瞬间就这么做。所有封闭源代码“web”技术的Fie。始终使用开放式工具


我只有这些了。但我是系统管理员。我很想看看其他人有什么想法。

谢谢你的建议。我永远不会用Flash上传文件。这似乎太过时了:)但是,我使用了blueimp的jQuery文件上传程序,从GitHub上传,并将其放在文件服务器上。然后,在Web服务器上,我创建了一个使用easyXDM插件的页面,该插件在iframe中加载远程文件服务器的uploader小部件,并允许与这两个页面进行通信。到目前为止,它就像一个符咒