테스트 사이트 - 개발 중인 베타 버전입니다

파일 다운로드 오류 채택완료

벛꽃꿀오소리 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년 전
답변 감사합니다. 자체 해결을 했습니다. 폴더의 권한을 안줘서 안됬던 겁니다 .ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

</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년 전
답변 감사합니다. 자체 해결을 했습니다. 폴더의 권한을 안줘서 안됬던 겁니다 .ㅎㅎ

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인