我正在尝试在 PHP 中的两个站点之间传输一个大型数组。我是两者的管理员。该数组是在一个站点上创建的,创建后我希望自动将用户重定向到另一个站点,并传递处理后的数组。
我不能使用 SESSION 超全局,因为它仅限于特定域。GET 不适合,因为数组太长。我不确定 POST 是否合适,以及是否有办法自动发送数据而不强制用户单击按钮并提交一些表单。我知道 javascript 可以用于此,但更喜欢拥有更强大的东西。
我对 PHP 比较陌生,很想听听其他执行此操作的方法。谢谢!
我正在尝试在 PHP 中的两个站点之间传输一个大型数组。我是两者的管理员。该数组是在一个站点上创建的,创建后我希望自动将用户重定向到另一个站点,并传递处理后的数组。
我不能使用 SESSION 超全局,因为它仅限于特定域。GET 不适合,因为数组太长。我不确定 POST 是否合适,以及是否有办法自动发送数据而不强制用户单击按钮并提交一些表单。我知道 javascript 可以用于此,但更喜欢拥有更强大的东西。
我对 PHP 比较陌生,很想听听其他执行此操作的方法。谢谢!
最简单的方法是使用 HTTP 库(如 cURL 和 setup)并向其他站点发送 POST 请求。还包括用户 IP 地址将允许您关联发布的数据。如果没有 JavaScript,您将无法使用 POST 数据重定向用户。
对于上述方法,您可能需要注意的一件事是,根据它的实现方式,用户可能会在数据到达之前到达。
HTTP 规范中定义的 POST 没有限制,但您可能会遇到在其他服务器上处理它的问题(取决于您所说的大),具体取决于 php 配置。(我相信 POST 限制默认设置为 8MB)
通过cURL 函数发送 HTTP POST 请求,并将serialize() ed 数组添加到请求正文中。
我会做这样的事情:
http://ServerB/?data_token=[TOKEN GENERATED IN STEP 1]
好吧,如果他们都在同一台服务器上,你可以让一个劫持另一个会话。我之前用它跳转到安全服务器,在第一台主机上使用 session_id() 函数获取会话,然后在第二台主机上使用相同的函数设置它。
我建议在创建“数组”后将它与一个 ID 关联(并存储在某处),然后使用此 ID 重定向到另一个。从站点 2 使用 ID,您可以调用站点 1 上的页面,该页面返回“数组”
将数组(ar)从服务器(a)发送到服务器(b)
Server(a)为Server(b )生成一个唯一的 url(url) ,其中包含使用 json_encode(ar) 在例如 json 中编码的Array( ar)。这个Array(ar)应该使用例如 mysql 或只是一个简单的文本文件存储在url中。
$uid = md5(uniqid(mt_rand(), true)); // to generate unique id
Server(a)将浏览器重定向到同样包含 $uid的Server(b)
$url = "http://server-b/page"; // url to page
header('Location: $url?uid=$uid');
Server(b)从Server(a)上的url获取内容并将内容解码回Array(ar)
$uid = $_GET['uid']; // uid
$url_server_a = "http://server-a/webservice?uid=$uid";
$ar = json_decode(file_get_contents($url_server_a));
我想您可以将其序列化,将其保存为可从另一台服务器访问的文件,然后从另一台服务器再次加载它。这样,不需要用户操作,但您必须保护保存文件的目录以避免隐私问题。
编辑:我假设他们在不同的服务器上,否则会更容易......
如果是我,我会将信息存储在其他介质中:例如 memcache 类型的环境,或者两者都可以访问的数据库。
After the array is created you could quickly generate a page that has a form which contains the data in a hidden field. This page could then automatically submit the form (with method="POST") to your redirect.
您可以将数组解码为 JSON 并将链接发送到第二个服务器,其中包含临时 JSON 文件的下载,只需将 JSON 文件重新解码回 PHP,您不必使用 LONG URL。