我的网站上有一个表单,它将数据发送到某个远程站点 - 简单的html表单。 我想要做的是使用数据用户输入表格进行统计。 因此,我不是将数据发送到远程页面,而是先将其发送到我的脚本,然后将其重新发送到远程站点。
问题是我需要它以完全相同的方式运行,通常的表单会将用户带到远程站点并显示资源。
当我使用这段代码时,它有点起作用,但不是我想要的方式:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $action);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
问题是它在同一个脚本中显示响应。例如,如果$ action是例如: somesite.com/processform.php和我的脚本名称是mysqcript.php,它会在“mysqcript.php”中显示“somesite.com/processform.php”的响应,因此所有相关链接都不起作用。 如何将用户发送到“somesite.com/processform.php”?按下按钮会发生什么?
Leonti
答案 0 :(得分:1)
我认为你必须在你的最后做到这一点,因为翻译相对路径是客户的工作。它应该很简单:只需获取您所做请求的基本目录
http://otherdomain.com/my/request/path.php
并将其添加到每个不以“/”或协议(“http://”,“ftp://”)开头的外发链接前面。
检测所有传出链接很难,但我100%确定有现成的PHP类可以做到这一点。检查示例this article和用户注释中的getLinks()函数。我不是百分之百确定这是否是你需要的,但它肯定会朝着正确的方向发展。
答案 1 :(得分:1)
以下是一些可能的解决方案,我单独发布,因此它们不会与我推荐的解决方案混淆:
1 - 继续使用cURL,解析响应并向其添加<base/> tag。它应该适用于该页面上的所有内容。
<base href="http://realsite.com/form_url.php" />
2 - 不要改变提交URL。将表单提交到真实URL,但使用一些Javascript库(YUI那样)捕获其内容并通过XHR将其发送到您的脚本。但它仍然是一种黑客。
答案 2 :(得分:0)
有几种方法可以做到这一点。这是最简单的方法之一:只需使用307重定向。
header('Location: http://realsite.com/form_url.php', true, 307');
您可以在header()
之前或之后进行日志记录和填充,但如果您在调用header()
之后执行此操作,则需要使用
ignore_user_abort(true);
请注意,浏览器应该通知用户他们的表单正在被重定向。