我正在使用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);
(使用冒号后的空格)对结果没有影响
答案 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标题位置信息崩溃,我将非常感激。