PHP头文件(“Location:$path”)可以在Chrome/Firefox上使用,但不能';我不在野生动物园工作

PHP头文件(“Location:$path”)可以在Chrome/Firefox上使用,但不能';我不在野生动物园工作,php,redirect,safari,header,Php,Redirect,Safari,Header,正如标题所说,PHP代码在Chrome/Firefox中非常好,但在Safari中出现了一个错误。我还检查了safari上的缓存问题,所以不是因为这个,但我仍然愿意接受有关缓存问题的建议。但是,我认为这不太可能,因为缓存问题。我在网上找不到这个问题的公认答案,我找到的大多数答案都不起作用。无论如何,我使用以下代码使用重定向打开带有PHP的pdf。我从表中获取pdf路径,它们是正确的 <?PHP $mish = $_GET['mission']; $dbLink =

正如标题所说,PHP代码在Chrome/Firefox中非常好,但在Safari中出现了一个错误。我还检查了safari上的缓存问题,所以不是因为这个,但我仍然愿意接受有关缓存问题的建议。但是,我认为这不太可能,因为缓存问题。我在网上找不到这个问题的公认答案,我找到的大多数答案都不起作用。无论如何,我使用以下代码使用重定向打开带有PHP的pdf。我从表中获取pdf路径,它们是正确的

    <?PHP 
    $mish = $_GET['mission'];
    $dbLink = new mysqli('server','user name','password','database name');
      if(mysqli_connect_errno()) {
        die("MySQL connection failed: ". mysqli_connect_error());
      }
    $queryTotal = "SELECT pdf_path FROM table WHERE id = '$mish' ";
    $result=mysqli_query($dbLink, $queryTotal);
      if(mysqli_num_rows($result) != 0) {
        $row = mysqli_fetch_array($result);
        header("Location: ".$row['pdf_path']); **// I believe this line is problematic**
        exit();
      }
    ?>
我尝试了这段代码,它重定向并适用于safari。然而,现在它并没有在Chrome上工作

任何帮助都将不胜感激


提前感谢。

请尝试此代码,因为它包含HTTP响应代码

<?php
 $url_path = 'public path to file';
 header( "HTTP/1.1 301 Moved Permanently");
 header( "Location: $url_path" );
 // Backup code
 echo '<script>window.location = "'.$url_path.'";</script>';
 echo 'window.location.replace('+$url_path+');';
 die;
?>

我找到了解决方案,想在这里与大家分享

$path = $row['pdf_path'];
$browser = get_browser();
if($browser[browser] == 'Safari') {
    header('Location: http:' . $_SERVER[HTTP_HOST]. rawurldecode($path));
}
else {
    header( "HTTP/1.1 301 Moved Permanently");
    header( "Location: $path" );
    echo '<script>window.location = "'.$path.'";</script>';
    echo 'window.location.replace('.$path.');';
    die;
}
$path=$row['pdf_path'];
$browser=get_browser();
如果($browser[browser]=='Safari'){
标头('Location:http:'.$\u服务器[http\u主机].rawurldecode($path));
}
否则{
标题(“HTTP/1.1 301永久移动”);
标题(“位置:$path”);
echo'window.location=“”.$path.“;”;
echo“window.location.replace(“.$path”);
死亡
}

它不像我所希望的那样优雅,但它很管用。我仍然不知道是什么问题,但这对我来说是可行的

所以Safari可以直接打开该URL,如果您不尝试重定向到它,而是通过地址栏输入它?您在位置标头中使用的是绝对URL还是相对URL?警告:您的代码容易受到SQL注入攻击。您应该使用参数化查询和准备好的语句来帮助防止攻击者使用恶意输入值破坏您的数据库。给出了风险的解释,以及如何使用PHP/mysqli安全地编写查询的一些示例。切勿将未初始化的数据直接插入SQL。你现在编写代码的方式,有人很容易窃取、错误更改甚至删除你的数据。谢谢,@ADyson它是我学校的服务器之一,我对安全问题不负责,他们让我这么做。谢谢你的警告,当我处理我自己的项目时,我会考虑它。“嗨,”CBroe,当我直接复制并粘贴路径在$ROW[PDFYPATH ]中时,它也在SAFAR中工作。因此,PDF在那里,路径是正确的,而且,如果我要在safari中复制并粘贴路径,则该路径是有效的。仍然不清楚您在位置标题中使用的是绝对URL还是相对URL。您好,它在Chrome中不起作用,我收到HTTP错误500。您好@bidon代码中有特殊字符,这就是它给您500错误的原因。请再次检查,我已经编辑了代码。是的,我再次检查,它现在和以前一样适用于Chrome。但是,在safari中仍然会出现相同的错误…@bidon你能粘贴一个重定向url吗。不想复制粘贴直接链接,但它是这样的。很抱歉这种神秘的态度,但有人说我的代码中存在安全问题,只是想小心。
<?php
 $url_path = 'public path to file';
 header( "HTTP/1.1 301 Moved Permanently");
 header( "Location: $url_path" );
 // Backup code
 echo '<script>window.location = "'.$url_path.'";</script>';
 echo 'window.location.replace('+$url_path+');';
 die;
?>
$path = $row['pdf_path'];
$browser = get_browser();
if($browser[browser] == 'Safari') {
    header('Location: http:' . $_SERVER[HTTP_HOST]. rawurldecode($path));
}
else {
    header( "HTTP/1.1 301 Moved Permanently");
    header( "Location: $path" );
    echo '<script>window.location = "'.$path.'";</script>';
    echo 'window.location.replace('.$path.');';
    die;
}