gpt4 book ai didi

php - 导出 CSV |奇怪的行为

转载 作者:行者123 更新时间:2023-11-29 14:35:56 26 4
gpt4 key购买 nike

所以,我认为我已经问过这个问题和其他相关问题超过两次了。但我无法弄清楚发生了什么。

我正在使用此 PHP 函数将一些数据从表导出到 CSV 表。我正在本地主机( XAAMP )上进行测试:

// Export CSV By User Level
public function CSVData($path, $level) {

switch ($level) {
case 0:
$filename = $path."/standard_members_".date('Y')."_".date('m')."_".date('d').".csv";
break;
case 1:
$filename = $path."/special_members_".date('Y')."_".date('m')."_".date('d').".csv";
break;
case 2:
$filename = $path."/admin_members_".date('Y')."_".date('m')."_".date('d').".csv";
break;
default:
break;
}


$sql = "SELECT user_name, user_username, user_email, user_register_date INTO OUTFILE '$filename' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' FROM users WHERE user_level = '$level'";

if ($stmt = $this->connect->prepare($sql)) {
if(!($stmt->execute())){
print_r($stmt->error);
}
$stmt->close();
} else {
$error = true;
$message['error'] = true;
$message['message'] = CANNOT_PREPARE_DATABASE_CONNECTION_MESSAGE;
return json_encode($message);
}


if(!is_file($filename)) {
die('file not found');
} else {
header('Content-Type: application/csv');
header("Content-Disposition: attachment; filename=$filename");
header('Expires: 0');
header('Pragma: no-cache');
readfile($filename);
}

}

我有一个执行该操作的表单,我的意思是它将操作提交到处理上述函数的 PHP 文件,这是操作代码:

<?php

include '../assets/class/login/loginsys.php';

$extension = new extension;

if ($_GET['action'] == 0) {

$extension->CSVData('exports', 0);

} elseif ($_GET['action'] == 1) {

$extension->CSVData('exports', 1);

} elseif ($_GET['action'] == 2) {

$extension->CSVData('exports', 2);

}

exit();

?>

发生的情况如下:

-当我单击表单上的提交按钮时,它会将值 0、1 或 2 发送到操作代码;- Action 代码获取值并进行相应处理;-但是如果我没有在本地主机上创建文件夹“exports”,则会出现此错误:

Can't create/write to file 'C:xampphtdocsloginadminexports\standard_members_2012_01_28.csv' (Errcode: 2);

-我已经创建了它,因此它可以工作;- 现在,CSV 文件所在的文件夹已创建,数据已转储到 CSV 表中;-但是在我的浏览器中打开的文件(下载的附件就像您从某个网站单击文件并下载它一样)它是空的,即使“导出”中导出的文件包含数据;-另一件事是,当文件已存在于“导出”文件夹中时,创建的表会告诉我:

File 'exports/admin_members_2012_01_29.csv' already exists

所以我的问题是为什么会发生我所描述的情况?有没有办法让 MySql 查询覆盖以前的 CSV 文件?

最佳答案

您不需要该临时文件。这个怎么样:

define('CSV_SEPARATOR', ',');

// CSV download headers
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename="my.csv"');

// A file handle to PHP output stream
$fp = fopen('php://output', 'w');

// UTF-8 BOM
echo "\xEF\xBB\xBF";

// Get data from database
$data = ...;

// List of columns
$columns = array(
'User name',
'First name',
'Last name'
);

foreach ($data as $key => $row) {

// Write columns
if ($key == 0) {
fputcsv($fp, $columns, CSV_SEPARATOR);
}

// Write data
fputcsv($fp, $row, CSV_SEPARATOR);
}

fclose($fp);

很漂亮,不是吗?

关于php - 导出 CSV |奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052085/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com