내 현재 CodeIgniter 프로젝트에 CSV 기능으로 다운로드가 있습니다. 사용자가 링크를 클릭하면 CSV로 파일을 다운로드합니다. 코드에 제공된 파일 이름에 물음표 문자가 있으면 다운로드 한 CSV 파일의 파일 이름이 올바르지 않습니다. 일을 분명히하기 위해 아래에 코드가 있습니다. 라인 header('Content-Disposition: attachment; filename="'.basename($name).'"');
에서 Firefox 버전 CSV 파일 다운로드
public function download($role = NULL, $id = 0, $eid = 0) {
$this->load->helper('download');
$list = $this->respondent->get_respondents($eid);
$questions = $this->respondent->get_all_questions($eid);
$fp = fopen('php://output', 'w');
$fields = array(
'Timestamp',
'First Name',
'Middle Name',
'Last Name',
);
$fields = array_merge($fields, $questions);
fputcsv($fp, $fields);
foreach ($list as $respondent) {
$respondent_data = array(
$respondent->since,
$respondent->first_name,
$respondent->middle_name,
$respondent->last_name,
);
$query = $this->respondent->get_responses($respondent->rid);
foreach($query as $response) {
array_push($respondent_data, $response->answer, $response->duration);
}
fputcsv($fp, $respondent_data);
}
$data = file_get_contents('php://output');
$name = $this->respondent->get_experiment($respondent->eid)->title.'.csv';
// Build the headers to push out the file properly.
header('Pragma: public'); // required
header('Expires: 0'); // no cache
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Cache-Control: private',false);
header('Content-Disposition: attachment; filename="'.basename($name).'"');
header('Content-Transfer-Encoding: binary');
header('Connection: close');
exit();
force_download($name, $data);
fclose($fp);
}
의
$name
는 올바르게 해석 할 수없는 파이어 폭스 나 크롬 브라우저에서 파일을 다운로드 물음표 문자를 가지고 한 번. 물음표 문자 대신 생성 된 문자는 각각 밑줄 또는 하이픈입니다. 그러나 Safari를 사용하여 다운로드 할 때 파일 이름은 정상적으로 작동합니다. 코드 또는 브라우저의 문제입니까?
왜 파일의 이름을 변경하지 않으십니까? (또는 단순히 물음표가 없으면 제거하십시오.) – Kyslik
입력 한 파일 이름은 동적입니다. 그것은 하드 코드되지 않기 때문에 나는 그것을 제어 할 수 없다. 프로젝트에서 사용자는 파일 이름을 입력하고 문자를 제한하고 싶지 않습니다. –