PHP .pdf下载脚本部分工作

时间:2018-04-17 16:58:25

标签: php

我在调试用于下载.pdf文件的php脚本时遇到问题。 该脚本适用于一个用户,但不适用于另一个用户提供空白页面。 我非常确定的是:

  1. 负责下载的部分适用于两个用户
  2. 查询工作正常并从服务器获取正确的数据
  3. 所有文件都在同一目录中(并且我已经写过,它对第一个用户来说非常有效)
  4. 请给我一个关于错误可能位置或如何找到它的提示。

    非常感谢。

    这是我的代码:

    .htacces:

    <Directory /faktury/>
    Order deny,allow
    Deny from all
    </Directory>
    

    html:

    <form action="downloadfv.php" method="post">
    <input type="text" name="fv" id="fv" value="$rowvariable" hidden />
    <button type="submit"">Download</button>
    </form>
    

    downloadfv.php:

    <?php
    
    session_start();
    
        if(!isset($_SESSION['zalogowany']))
        {
            header('Location: logowanie.php');
            exit();     
        }
    
    require_once "connect.php";
    mysqli_report(MYSQLI_REPORT_STRICT);
    
    $polaczenie = new mysqli($host, $db_user, $db_password, $db_name);
    mysqli_query($polaczenie, "SET CHARSET utf8");
    mysqli_query($polaczenie, "SET NAMES `utf8` COLLATE `utf8_polish_ci`");
    
    if (mysqli_connect_errno())
    {
        echo "Could not connect to server" . mysqli_connect_error();
    }   
    
    $idogloszenia = htmlspecialchars($_POST['fv'], ENT_QUOTES,'UTF-8');
    $sql = "SELECT * FROM faktury WHERE user='{$_SESSION['user']}' AND idogloszenia = '$idogloszenia' ORDER BY idogloszenia DESC LIMIT 1";
    $result = $polaczenie->query($sql); 
    
    
    if ($result->num_rows > 0) {
    
        while($row = $result->fetch_assoc()) {
    
    
    
            $file = "./faktury/".$row["nazwapdf"].".pdf";
    
            if (file_exists($file)) {
    
    
            header('Content-Description: File Transfer');
            header('Content-Type: application/pdf');
            header('Content-Disposition: attachment; filename="'.basename($file).'"');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($file));
            ob_clean();
            flush();
            readfile($file);
            exit;
            }
        }   
        } else {
            echo " <div class='itemsname'>
                    <span style='padding:10px; font-size:90%'><u>No invoice available.</u></span>
                </div>";
        }
    
        $polaczenie->close();
    ?>
    

1 个答案:

答案 0 :(得分:0)

脚本运行正常。这个bug出现在我的测试数据库中。我发现我的重复行中包含类似的数据,而查询选择了错误的行。

因此可以使用脚本,尽管@mehdi指出它不安全。

谢谢你@ chris85的提示。