curl完成执行之前的php重定向

时间:2015-05-07 12:08:03

标签: php jquery html curl meta

因此,我们的系统可以改变您在显示器上看到的内容。此代码用于发送命令为"参数"到那个JQuery页面。

curl工作得很漂亮,但是当我们注释掉处理重定向到XML文档的if语句时。发生重定向并且不执行Curl请求。我们需要了解为什么会发生这种情况,当我们删除重定向时,它会运行curl请求。当重定向到位时,不执行curl请求。

请帮助找到问题的原因以及纠正问题的方法,我们必须保留重定向但是如果有更好的方法来运行curl请求,即不使用curl但是会有很好的效果,任何建议都将进行测试。

<html>
<head>
<?php
    ob_implicit_flush(false);
    $argument = $_GET["argument"];
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, "http://example.com/sub/page.html?api_key=**********&device_id=************&argument=".$argument."");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_exec($ch);
    curl_close($ch);

  if($argument == 1) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service1.xml">';
  } else if($argument == 2) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service2.xml">';
  } else if($argument == 3) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service3.xml">';
  } else if($argument == 4) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service4.xml">';
  }
?>
</head>
</html>

2 个答案:

答案 0 :(得分:0)

从我所看到的卷曲请求可能还没有完成它在页面执行重做之前的事情。为什么不从curl请求中获取返回值并将其作为后续if语句的先决条件?

即:

$status=curl_getinfo( $ch, CURLINFO_HTTP_CODE );

if( $status==200 ){
  if($argument == 1) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service1.xml">';
  } else if($argument == 2) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service2.xml">';
  } else if($argument == 3) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service3.xml">';
  } else if($argument == 4) {
       echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service4.xml">';
  }
}

答案 1 :(得分:0)

从您的观点来看,我可以得出以下几点。

  1. PHP程序在顺序执行中运行,因此很明显curl执行将在第一步运行,然后重定向发生在XML文档中。
  2. 这是因为由于卷曲执行时间会很长

    1. 确保在卷曲成功后重定向页面

      $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
      if($status == 200){
          if($argument == 1) {
              echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service1.xml">';
          } else if($argument == 2) {
              echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service2.xml">';
          } else if($argument == 3) {
              echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service3.xml">';
          } else if($argument == 4) {
              echo '<META http-equiv="refresh" content="0;URL=http://adloc8tor.com/ussd/service4.xml">';
          }
      }