加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 当我导出数据时,为什么下载窗口不会长时间出现在浏览器中

发布时间:2020-12-13 16:15:53 所属栏目:PHP教程 来源:网络整理
导读:我尝试将数据从数据库导出到.csv.当我点击导出链接时,如果有大量数据,我在浏览器中看不到保存窗口很长时间.如果脚本看起来像悬挂一段时间并且很长一段时间后可以在浏览器中看到保存窗口,这可能会令人困惑. 代码在控制器中是这样的: $this-_helper-layout-di
我尝试将数据从数据库导出到.csv.当我点击导出链接时,如果有大量数据,我在浏览器中看不到保存窗口很长时间.如果脚本看起来像悬挂一段时间并且很长一段时间后可以在浏览器中看到保存窗口,这可能会令人困惑.
代码在控制器中是这样的:

$this->_helper->layout->disableLayout();
        $this->_helper->viewRenderer->setNoRender();
        $fileName = $list->list_name . '.csv';

        $this->getResponse()->setHeader('Content-Type','text/csv; charset=utf-8')
                            ->setHeader('Content-Disposition','attachment; filename="'. $fileName . '"');      

        $contacts = new Contact();
        $contacts->export($listId);

导出方法逐个读取记录并打印如下:

$fp = fopen('php://output','w');        
    foreach ($mongodbCursor as $subscriber) {
           $row = formRow($subscriber);
       fputcsv($fp,$row);
        }

我在一些应用程序上看到,几乎可以立即显示保存winow,当您单击“保存”时,您会看到下载进度.

我试图替换:

$this->getResponse()->setHeader('Content-Type','text/csv; charset=utf-8')
                        ->setHeader('Content-Disposition','attachment; filename="'. $fileName . '"');

这一个:

header('Content-Type: text/csv; charset=utf-8');
    header('Content-Disposition: attachment; filename="'. $fileName . '"');

到目前为止它没有帮助.
我想知道在从数据库中逐个读取所有数据之前是否可以发送标头?
感谢您的协助.

解决方法

嗯,我不熟悉php://输出,我的应用程序用fopen,fwrite,fclose将我的信息写入临时文件,之后我用类似的header()给出它;选项.

$filesize = filesize("tmp/export.csv");
            header("Content-Type: text/csv");
            header("Content-Disposition: attachment; filename="export.csv"");
            header("Conent-Length: $filesize");
            readfile("tmp/export.csv");
            unlink("tmp/export.csv");
            exit;

这个可以立即显示浏览器的下载窗口.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读