duanping5306 2019-02-08 08:21
浏览 29

下载临时文件并显示结果

I have a text input area, and a submit button in an HTML form. The input to the text area is an SQL query which hits my database and displays the result on the frontend.

Now I have a new requirement that it should also store the results in a file and download it. So I'm trying to write the results to a temp file and download it. Here's my code snippet for both displaying and downloading the tempfile, as seen here.

<html>
    <form method="POST">
        <input type="text" name="urlid"><br>
        <input type="submit" name="sub">
    </form>
</html>
<?php
    if (isset($_REQUEST['sub'])) {
        require_once ('start.php');  //Contains all database connections
        $queryUser = $_REQUEST['urlid'];
        echo($queryUser);
        $result5 = runquery($queryUser);  //Defined inside start.php
        echo "<table border='1'>";
        $i = 0;
        while ($row = db2_fetch_assoc($result5)) {
            if ($i == 0) {
                foreach($row as $field => $value) {
                    echo "<th>".$field."</th>";
                    $i = $i + 1;
                }
            }
            echo "<tr>";
            foreach($row as $field => $value) {
                echo "<td>".$value."</td>";
            }
            echo "</tr>";
        }
        echo "</table>";

        $x = file_get_contents('test.sql');
        $res = runquery($x);
        $myfile = tmpfile();
        $write = "";
        while ($row = db2_fetch_assoc($res)) {
            if ($i == 0) {
                foreach($row as $field => $value) {
                    $write .= $field."\t";
                    $i = $i + 1;
                }
                $write .= "
";
            }
            foreach($row as $field => $value) {
                $write .= $value."\t";
            }
            $write .= "
";
        }
        echo $write;
        fwrite($myfile , $write);
        fclose($myfile);

        header('Content-Description: File Transfer');
        header('Content-Type: text/csv');
        header('Content-Disposition: attachment; filename=data.txt');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate');
        header('Pragma: public');
        header('Content-Length: ' . filesize($myfile));

        ob_clean();
        flush();
        readfile($myfile);    
        unlink($myfile);
    }

?>

Now the problem is both don't happen together. If I comment out the downloading part (the one starting from the header calls), it displays the data, but if I uncomment that part, it only downloads a blank file, and does not display the data.

So:

  • Is my way of writing to the temporary file correct?
  • How do I display the table as well as download the text file
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 求帮我调试一下freefem代码
    • ¥15 R语言Rstudio突然无法启动
    • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
    • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
    • ¥15 用windows做服务的同志有吗
    • ¥60 求一个简单的网页(标签-安全|关键词-上传)
    • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图