1. 인터넷에서 파일을 다운로드하는 기능을 기반으로
<code> public function putFile($file_dir, $file_name){ $file_dir = chop($file_dir);//去掉路径中多余的空格 //得出要下载的文件的路径 if($file_dir != '') { $file_path = $file_dir; if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/') $file_path .= '/'; $file_path .= $file_name; } else $file_path = $file_name; //判断要下载的文件是否存在 if(!file_exists($file_path)) { // alert('对不起,你要下载的文件不存在'); return false; } $file_size = filesize($file_path); header("Content-type: application/octet-stream;charset=gbk"); header("Accept-Ranges: bytes"); header("Accept-Length: $file_size"); header("Content-Disposition: attachment; filename=".$file_name); $fp = fopen($file_path,"r"); $buffer_size = 1024; $cur_pos = 0; while(!feof($fp)&&$file_size-$cur_pos>$buffer_size) { $buffer = fread($fp,$buffer_size); echo $buffer; $cur_pos += $buffer_size; } $buffer = fread($fp,$file_size-$cur_pos); echo $buffer; fclose($fp); return true; }</code>
확실히 같은 파일인데 다운로드한 파일이 원본 파일보다 작게 보이는 이유는 무엇인가요?
1. 인터넷에서 파일을 다운로드하는 기능을 기반으로
<code> public function putFile($file_dir, $file_name){ $file_dir = chop($file_dir);//去掉路径中多余的空格 //得出要下载的文件的路径 if($file_dir != '') { $file_path = $file_dir; if(substr($file_dir,strlen($file_dir)-1,strlen($file_dir)) != '/') $file_path .= '/'; $file_path .= $file_name; } else $file_path = $file_name; //判断要下载的文件是否存在 if(!file_exists($file_path)) { // alert('对不起,你要下载的文件不存在'); return false; } $file_size = filesize($file_path); header("Content-type: application/octet-stream;charset=gbk"); header("Accept-Ranges: bytes"); header("Accept-Length: $file_size"); header("Content-Disposition: attachment; filename=".$file_name); $fp = fopen($file_path,"r"); $buffer_size = 1024; $cur_pos = 0; while(!feof($fp)&&$file_size-$cur_pos>$buffer_size) { $buffer = fread($fp,$buffer_size); echo $buffer; $cur_pos += $buffer_size; } $buffer = fread($fp,$file_size-$cur_pos); echo $buffer; fclose($fp); return true; }</code>
확실히 같은 파일인데 다운로드한 파일이 원본 파일보다 작게 보이는 이유는 무엇인가요?
시스템마다 차이가 있는 것은 정상입니다
작성하기가 너무 복잡할수록 실수하기 쉽습니다. 길이 관리에 문제가 있는지는 잘 모르겠습니다.
<code>$fp = fopen($file_path,"r"); $content = ''; while($_content = fread($fp, 1024)) $content.= $_content; fclose($fp);</code>
파일이 100바이트에 불과한 경우 fread($fp, 1024)는 1024바이트를 얻지 못합니다.
그리고... charset=gbk도 없애야 하고, 인코딩을 따로 지정할 필요도 없을 것 같아요.