在没有浏览器的情况下访问页面重定向不能在php中工作

时间:2011-12-12 08:46:21

标签: php browser redirect header sms

我正在开发一个应用程序,其中我收到的输入是通过SMS网关(而不是浏览器)。我需要处理通过SMS获取的数据并将其传递到另一个PHP文件,该文件将完成处理并将SMS发送回SMS网关。

但是,当我尝试从page1.php重定向到page2.php时,它无法使用以下代码:

page1.php中:

$url = "location:http://www.iweavesolutions.com/$extra?sms=".$msg."&keyword=".$key."&num=".$msg_num."&src=".$source;
header($url);

使page2.php:

$msg = $_GET['sms'];
$msg_num = $_GET['num'];
$keyword = $_GET['keyword'];
$src = $_GET['src'];
send_sms($msg,$msg_num);

但是,第一页中的标题调用似乎不起作用。 php文档说该标头用于与浏览器相关的活动。在我的应用程序中根本没有浏览器。那么,我是否需要更改跨文件传递值的机制?请帮忙

3 个答案:

答案 0 :(得分:2)

请参阅" CURL"

$ch = curl_init(); 
curl_setopt($ch,CURLOPT_URL,"http://www.iweavesolutions.com");     
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'variable1=abc&variable2=123');     
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,true); 
curl_setopt($ch,CURLOPT_MAXREDIRS,1); 
$buffer = curl_exec($ch); 
curl_close($ch);

像这样的事情

答案 1 :(得分:0)

发送location:[someUrl]标头作为请求的答案只是告诉请求客户端对该位置执行另一个请求。是否遵循此重定向由客户端决定。浏览器通常会这样做,其他客户可能不这样做。

如果您正在处理的客户端(SMS网关)不遵循位置标头重定向,则需要检查客户端文档是否有某种机制可以让他这样做。如果无法重定向客户端,则需要更改服务器端逻辑以消除重定向的需要,即您需要直接从'page1.php'调用'page2.php'中的处理逻辑没有重定向的间接(或将整个逻辑捆绑在一个文件中等)。

答案 2 :(得分:0)

SMS网关可能无法正确实现HTTP。 IME这并不罕见。

作为旁注,你的第一个脚本(假设它是完整的)是在假设register_globals被启用的情况下编写的 - 这已经被弃用了很长时间,并且没有对值进行url编码 - 这可能是问题的原因这里。如果没有,您需要:

  • 修复短信网关
  • 更改在SMS网关上注册的结束点以消除重定向的内容
  • 将重定向脚本中的代码包含在当前端点脚本中
  • 在端点脚本中代理来自网关的请求。