16

我正在使用 jQuery 来识别单击按钮,然后触发对文件的调用:

window.location.href = "url";

该文件查询数据库,返回结果,然后将其写入 CSV 文件。我设置了以下标题:

header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename=data.csv');

这适用于除 Chrome 之外的所有浏览器,它在控制台日志中返回以下错误“资源解释为文档但使用 MIME 类型文本/csv 传输:“url””。

奇怪的是,如果我直接调用该文件,它可以在所有浏览器中使用。

代码:

                $fp = fopen('php://output', 'w');

                header('Content-Type: text/csv;');
                header('Content-Disposition: attachment; filename=data.csv');
                header("Expires: 0");
                header("Cache-control: private");

                //Field Headers
                $ncols = oci_num_fields($stid);
                $headers_row = array();
                for ($i = 1; $i <= $ncols; ++$i) {

                    $headers_row[] = oci_field_name($stid, $i); 

                }

                while ($row = oci_fetch_array($stid, OCI_NUM+OCI_RETURN_NULLS)) {

                    if(!empty($row)){
                        if(!empty($headers_row)){
                            fputcsv($fp, $headers_row);
                            $headers_row = '';
                        }

                        fputcsv($fp, $row);
                    }

                }

                fclose($fp);                    
                oci_close($conn);

有人有什么想法吗?

4

6 回答 6

1
try {
    $conn = new PDO("mysql:host=$servername;dbname=db_1", $username, $password);
    //set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    //echo "Connected successfully"; 
    }
catch(PDOException $e)
    {
      echo "Connection failed: " . $e->getMessage();
    }


$query = $conn->prepare("SELECT * FROM csv_filds order by id asc");
$query->execute();
$data = "";
 while($row=$query->fetch(PDO::FETCH_BOTH)){ 
  $data .= $row['id'].",".$row['Name'].",".$row['father_name'].",".$row['address']."\n";
}
header('Content-Type: application/csv');
header('Content-Disposition: attachment; filename="csvfile.csv"');
echo $data; exit();
于 2021-01-24T15:39:03.533 回答
0

header("内容类型:应用程序/强制下载");

于 2013-02-01T13:19:21.420 回答
0

header("过期时间:0");

header("缓存控制:私有");

于 2013-02-01T13:22:27.060 回答
0

尝试生成文件的 readfile() 并添加标题“content-length”。如果它有效,那么您可能必须先写入文件,然后再进行输出。

于 2020-05-15T12:41:00.473 回答
0

尝试应用程序内容类型

header("content-type: application/octet-stream");

也是用户公共访问,因此用户可以下载

header("Pragma: public");

于 2020-02-14T07:30:22.303 回答
0

我遇到了同样的问题,但 chrome 将其显示为警告而不是错误。我设法通过将标题更改为'Content-Type', 'text/plain'. 很烦人的是,这个问题在手术后 6 年左右仍然存在。

于 2019-03-20T14:36:11.070 回答