파일 다운로드 오류 채택완료
벛꽃꿀오소리
3년 전
조회 3,534
</p>
<pre>
$filepath = G5_DATA_PATH.'/file/'.$bo_table.'/'.$file['bf_file'];
$filepath = addslashes($filepath);
$file_exist_check = (!is_file($filepath) || !file_exists($filepath)) ? false : true;
if ( false === run_replace('download_file_exist_check', $file_exist_check, $file) ){
alert('파일이 존재하지 않습니다.');
}
</pre>
<p>
파일 명에 한글이 있는 파일을 다운하려고 하면 파일이 존재하지 않다고 오류가 납니다.
$filepath를 echo 로 출력 해보면 파일 경로는 잘 나오는데 is_file 과 file_exist에서
넣으면 파일을 못 찾습니다. 어떻게 하면 파일을 다운로드 할 수 있을가요?
댓글을 작성하려면 로그인이 필요합니다.
답변 2개
채택된 답변
+20 포인트
3년 전
서버 환경마다 차이가 조금씩 있을수 있다고 생각됩니다.
경험상 서버 파일에서 다이렉트로 받아서 처리되는 부분이 있는가하면 변환해서 처리되는 부분도 있네요
rawurlencode()와 urlencode() 함수를 사용해보시기 바랍니다.
$filepath를 위함수로 한번 더 감싸서 처리해보세요. 환경마다 다르기때문에 혹시 이게 먹일수도 있으니까요.
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
벛꽃꿀오소리
3년 전
답변 감사합니다. 자체 해결을 했습니다. 폴더의 권한을 안줘서 안됬던 겁니다 .ㅎㅎ
댓글을 작성하려면 로그인이 필요합니다.
3년 전
</p>
<p><?php
function mb_basename($path) { return end(explode('/',$path)); }
function utf2euc($str) { return iconv("UTF-8","cp949//IGNORE", $str); }
function is_ie() {
if(!isset($_SERVER['HTTP_USER_AGENT']))return false;
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) return true; // IE8
if(strpos($_SERVER['HTTP_USER_AGENT'], 'Windows NT 6.1') !== false) return true; // IE11
return false;
}</p>
<p>$filepath = './헬로_월드.txt';
$filesize = filesize($filepath);
$filename = mb_basename($filepath);
if( is_ie() ) $filename = utf2euc($filename);</p>
<p>header("Pragma: public");
header("Expires: 0");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: $filesize");</p>
<p>readfile($filepath);
참조 코드입니다.(테스트는 안해봤습니다. 인터넷에서 주워왔습니다 ^^; )
로그인 후 평가할 수 있습니다
답변에 대한 댓글 1개
�
벛꽃꿀오소리
3년 전
답변 감사합니다. 자체 해결을 했습니다. 폴더의 권한을 안줘서 안됬던 겁니다 .ㅎㅎ
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인