PHP头重定向奇怪的问题

时间:2016-06-22 09:39:47

标签: php

我正在使用PHP标头重定向来推送我的用户通过我的PHP-HTML网站,但是在尝试执行此操作时我遇到了一个不寻常的问题。

屏幕上显示的内容为空白,而是重定向的网址,但在重定向之前,网址栏似乎仍显示旧网址。

没有echo "";语句,print_r();语句或var_dump();语句可能导致此问题,也没有任何疯狂的HTML或空格(我已检查过三次) ,所有HTML都包含在<<<HTML [htmlhere] HTML;中,使用&#34;查找和替换&#34;

消除了空格

我还尝试在我的标题代码后使用exit();无法提供帮助。如果我在这里傻傻的话,谁能告诉我?

代码

<?PHP
if(!isset($_SESSION))
{
  session_start();
}
function getPage($link)
{
  $contents="";
  $cSession=curl_init();
  curl_setopt($cSession,CURLOPT_URL,$link);
  curl_setopt($cSession,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($cSession,CURLOPT_HEADER,true);
  curl_setopt($cSession,CURLOPT_FOLLOWLOCATION,false);
  $contents.=curl_exec($cSession);

  if(preg_match('#HTTP/1.1(.*)#',$contents,$t))
  {
    $code=trim($t[1]);
  }
  else
  {
    $code="";
  }

  if($code=="301 Moved Permanently")
  {
    if(preg_match('#Location:(.*)#',$contents,$r))
    {
      $l=trim($r[1]);
    }

    $contents="";
    $handler=fopen($l,"r");

    while(!feof($handler))
    {
      $contents.=fread($handler,1024);
    }

    fclose($handler);
  }
  else if($code=="200 OK")
  {
    $contents=curl_exec($cSession);
  }
  else
  {
    $contents="";
  }
  curl_close($cSession);

return $contents;
}

function checkPage($content)
{
  $links=array();
  $textLen=strlen($content);
  if($textLen>10)
  {
    $startPos=0;
    $valid=true;

    while($valid)
    {
      $spos=strpos($content,'<a',$startPos);
      if($spos<$startPos)
      {
        $valid=false;
      }
      else if($spos===FALSE)
      {
        $valid=false;
      }
      else
      {
        $spos=strpos($content,'href',$spos);
        $spos=strpos($content,'"',$spos)+1;
        $epos=strpos($content,'"',$spos);
        $startPos=$epos;
        $link=substr($content,$spos,$epos-$spos);
        if(strpos($link,"http://")!==false)
        {
          $link=rtrim($link,'/');
          $links[]=$link;
        }
        else if(strpos($link,"https://")!==false)
        {
          $link=rtrim($link,'/');
          $links[]=$link;
        }
      }
    }
  }
  return $links;
}

function checkArray($array,$url)
{
  $new_array=array();
  $update=array();

  foreach($array as $child)
  {
    if(strpos($child,$url)===FALSE)
    {
      $child="";
    }
    else
    {
      if($child===$url)
      {
        $child="";
      }
      $new_array[]=$child;
    }
  }

  $new_array=array_unique($new_array);
  $new_array=array_filter($new_array);

  return $new_array;
}

$v_url_to_check="";
$v_api="";

if(isset($_POST["URL"])&&isset($_POST["Feedback"]))
{
  $v_url_to_check=filter_var($_POST["URL"],FILTER_SANITIZE_URL);
  $v_api=filter_var($_POST["Feedback"],FILTER_SANITIZE_STRING);
}
else if(isset($_POST["URL"])&&!isset($_POST["Feedback"]))
{
  $v_url_to_check=filter_var($_POST["URL"],FILTER_SANITIZE_URL);
  $v_api="";
}
else
{
  $_SESSION["Message"]="BadData";
  header("Location:".$_SESSION['loc'],true,301);
  exit;
}

if(strpos($v_url_to_check,".")===FALSE)//
{   
  $_SESSION["Message"]="Failed";
  header("Location:".$_SESSION['loc'],true,301);
  exit;
}
else
{
  $a_content=checkPage(getPage($v_url_to_check));
  $new_array=checkArray($a_content,$v_url_to_check);

  $count=0;
  foreach($new_array as $child)
  {
    $count++;
  }
  $i=0;
  foreach($new_array as $childs)
  {
    $update["Child$i"]=$childs;
    $i++;
  }

  if($count!=0)
  {
    $_SESSION["Message"]="Success";
    $_SESSION["Links"]=$count;
    $_SESSION["ReturnedArray"]=$update;
    $_SESSION["RequestedURL"]=$v_url_to_check;
    $_SESSION["FeedbackValue"]=$v_api;

    header('Location:'.$_SESSION['loc'],true,301);
    exit;
  }

  else
  {
    $_SESSION["Message"]="Failed";

    header("Location:".$_SESSION['loc'],true,301);
    exit;
  }
}
?>

$_SESSION['loc']正在主代码(index.php)中设置,但由于重定向没有问题,我不包括它。

编辑header("Location: ".$_SESSION['loc'],true,301);(使用冒号后的空格)对结果没有影响

2 个答案:

答案 0 :(得分:0)

尝试在像这样的位置之后使用空格可能是由于空间错误,

header("Location: ".$_SESSION['loc'],true,301);

另请访问此链接以获取包含永久或临时重定向的标头。 Manual

答案 1 :(得分:0)

好。哇,所以我完全错了!它不是重定向的问题,它是主索引页面(完全重定向到PHP代码的形式)

在主索引页面中,我有以下代码,当取出时解决了问题:

<强> CODE

<META name="viewport" content="width=device-width, initial-scale=1">
<LINK rel="stylesheet" href="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<SCRIPT src="//code.jquery.com/jquery-1.11.3.min.js"></SCRIPT>
<SCRIPT src="//code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></SCRIPT>

似乎包括jquery是杀死它的东西。

不确定它是如何做到的,但删除它会带走一些功能。我需要它用于HTML表单输入范围滑块,可以动态更改值。如果有人想看看并在评论中告诉我jquery如何导致PHP标题位置信息崩溃,我将非常感激。