我正在使用jQuery识别按钮上的点击,然后触发对文件的调用:
window.location.href = "url";
此文件查询数据库,返回结果,然后将其写入CSV文件。我设置了以下标题:
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename=data.csv');
这适用于除Chrome以外的所有浏览器,它在控制台日志中返回以下错误“资源被解释为文档但使用MIME类型text / 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);
有人有任何想法吗?
答案 0 :(得分: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();
答案 1 :(得分:0)
header(“content-type:application / force-download”);
答案 2 :(得分:0)
标题(“过期:0”);
header(“Cache-control:private”);
答案 3 :(得分:0)
我遇到了同样的问题,但Chrome将其显示为警告而不是错误。通过将标题更改为'Content-Type', 'text/plain'
,我设法停止了警告显示。
很烦人的是,这个问题距op发行还有6年了。
答案 4 :(得分:0)
尝试应用程序内容类型
header(“ content-type:application / octet-stream”);
还具有用户公共访问权限,因此用户可以下载
header(“ Pragma:public”);
答案 5 :(得分:0)
尝试生成的文件的readfile()并添加标题“ content-length”。 如果可行,则可能必须先写入文件,然后执行输出。