繁体   English   中英

PHP标头重定向奇怪的问题

[英]PHP header redirect strange issue

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

屏幕上显示的内容不是空白,而是重定向的URL,但是URL栏似乎仍显示重定向前的旧URL。

没有echo ""; 语句, print_r(); 语句或var_dump(); 可能导致这种情况的语句,也没有任何狂野的HTML或空格(我已经检查了三次,所有HTML都用<<<HTML [htmlhere] HTML;并且空格已使用“查找并替换” ”)

我也尝试使用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); (在冒号后使用空格)对结果没有影响

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

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

另请访问此链接以获取具有永久或临时重定向的标题。 手册

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

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

<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标头位置信息崩溃,我将不胜感激。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM