PHP에서 파일을 다운로드하는 방법: 1. "$_GET['file']"에서 파일 경로를 가져옵니다. 2. 헤더 정보를 설정합니다. 3. "file_get_contents()" 및 "file()" 메서드를 사용합니다. 4. "readfile" 및 "fopen" 방법을 통해.
추천: "PHP 비디오 튜토리얼"
PHP로 파일을 다운로드하는 방법
1. 파일 경로를 가져옵니다
$_GET['file']
$path_parts = pathinfo($_GET['file']); $file_name = $path_parts['basename']; $file_path = '/mysecretpath/' . $file_name;
에서 파일 경로를 가져옵니다. 위의 방법을 꼭 사용하세요. 이 방법을 사용하면 경로를 얻을 수 있습니다. 단순히 문자열을 연결하여 경로를 얻을 수는 없습니다
$mypath = '/mysecretpath/' . $_GET['file'];
입력이 ../../이면 모든 경로에 액세스할 수 있습니다
2.
header('Content-Description: File Transfer'); //描述页面返回的结果 header('Content-Type: application/octet-stream'); //返回内容的类型,此处只知道是二进制流。具体返回类型可参考http://tool.oschina.net/commons header('Content-Disposition: attachment; filename='.basename($file));//可以让浏览器弹出下载窗口 header('Content-Transfer-Encoding: binary');//内容编码方式,直接二进制,不要gzip压缩 header('Expires: 0');//过期时间 header('Cache-Control: must-revalidate');//缓存策略,强制页面不缓存,作用与no-cache相同,但更严格,强制意味更明显 header('Pragma: public'); header('Content-Length: ' . filesize($file));//文件大小,在文件超过2G的时候,filesize()返回的结果可能不正确
$str = file_get_contents($file); echo $str;
$f = file($file); while(list($line, $cnt) = each($f)) { echo $cnt; }
5. 출력 파일의 Readfile() 메서드readfile() 메서드: 파일을 읽고 출력 버퍼에 씁니다
이 방법은 전체 파일이 메모리를 차지하지 않고 바로 버퍼에 출력할 수 있는 방법입니다 전제 조건은 먼저 버퍼링을 지우고 파일을 다운로드할 수 있는 대화 상자를 사용자에게 표시하는 것입니다
while (ob_get_level()) ob_end_clean(); //设置完header以后 ob_clean(); flush(); //清空缓冲区 readfile($file);
readfile()은 여러 사람이 파일을 읽을 때 PHP 메모리가 소진되게 합니다. http://stackoverflow.com/questions/6627952/why-does-readfile-exhaust-php-memoryPHP는 읽어야 합니다 따라서 300Mb 파일의 경우 어떤 구현을 작성하든(많은 작은 세그먼트 또는 1개의 큰 청크) PHP는 결국 300Mb의 파일을 읽어야 합니다.여러 사용자의 경우 (한 서버에서는 호스팅 제공업체가 각 호스팅 사용자에게 제공되는 메모리를 제한합니다. 이러한 제한된 메모리로 인해 버퍼를 사용하는 것은 좋은 생각이 아닐 것 같습니다. )제 생각에는 파일을 다운로드하기 위한 직접 링크는 대용량 파일에 훨씬 더 나은 접근 방식입니다.주요 아이디어: PHP는 파일을 읽은 다음 버퍼에 출력해야 합니다. 300M 파일의 경우 PHP는 여전히 300M의 메모리를 읽어야 합니다. 따라서 여러 사용자가 동시에 다운로드하는 경우 버퍼에도 메모리가 부족해집니다. (틀리면 정정해주세요)예를 들어 100명의 사용자가 다운로드하는 경우 100*buffer_size 메모리가 필요합니다6 출력 파일의 fopen() 메서드
set_time_limit(0); $file = @fopen($file_path,"rb"); while(!feof($file)) { print(@fread($file, 1024*8)); ob_flush(); flush(); }
위 내용은 PHP에서 파일을 다운로드하는 방법 [요약]의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!