$sql_text = mb_convert_encoding("select {$fields} from {$table} {$is_order}", 'Windows-1251', 'UTF-8'); global $ADODB_FETCH_MODE; $ADODB_FETCH_MODE = ADODB_FETCH_NUM; $recordSet = $conn->Execute($sql_text); PutRecordSetToCSV($recordSet, $file, ';'); // header('X-Accel-Redirect: ' . $file); // заставляем браузер показать окно сохранения файла header('Content-Description: File Transfer'); header('Content-Type: text/csv'); header('Content-Transfer-Encoding: binary'); header('Expires: 36000'); header('Cache-Control: must-revalidate'); header('Pragma: public'); header("Content-Disposition: attachment; filename=" . basename($file)); header('Content-Length: ' . filesize($file)); // читаем файл и отправляем его пользователю readfile($file); // освобождаем файл unlink($file); /* else echo $sql_text; */ ClearCashe(); } catch (Exception $e) { $_SESSION['errors'] = $conn->ErrorMsg(); $_SESSION['error_class'] = $e; $_SESSION['error_time'] = date('d.m.y H:i:s'); echo "Ошибка при создании файла экспорта CSV. Подробности смотри <a href='error_log.php' target='_blank'>тут </a>." . $conn->ErrorMsg(); } exit;
function PutRecordSetToCSV($recordSet, $file, $TERMINATED = ',', $ENCLOSED = '"', $LINES_TERMINATED = "\r\n") { global $filename; $fd = fopen($file, 'wb'); // пишем заголовки for ($i = 0; $i < $recordSet->FieldCount(); $i++) { $field = $recordSet->FetchField($i); $name = $field->name; /* if ( substr($name, 0, 3 ) == 'id_' && (substr($name, 2) != substr($filename, 2)) ) ClearCashe($name); */ fwrite($fd, $ENCLOSED . GetFieldProp($field->name) . $ENCLOSED . $TERMINATED); } fwrite($fd, $LINES_TERMINATED); // пишем данные foreach ($recordSet as $key => $row) { for ($i = 0; $i < $recordSet->FieldCount(); $i++) { $field = $recordSet->FetchField($i); $name = $field->name; $value = substr($name, 0, 3) == 'id_' && substr($name, 2) != substr($filename, 2) ? GetValueFromID($row[$i], $name, 300) : $row[$i]; fwrite($fd, $ENCLOSED . $value . $ENCLOSED . $TERMINATED); } fwrite($fd, $LINES_TERMINATED); } // while fclose($fd); // чистим кеш for ($i = 0; $i < $recordSet->FieldCount(); $i++) { $field = $recordSet->FetchField($i); $name = $field->name; if (substr($name, 0, 3) == 'id_' && substr($name, 2) != substr($filename, 2)) { ClearCashe($name); } } }