>  기사  >  백엔드 개발  >  헤더 방식을 통한 PHP 다운로드 파일 튜토리얼

헤더 방식을 통한 PHP 다운로드 파일 튜토리얼

一朵云彩
一朵云彩원래의
2020-05-04 14:33:552846검색

PHP가 헤더 메소드를 통해 파일을 다운로드하는 경우 ajax 메소드를 사용하여 제출할 수 없습니다. 이 메소드는 헤더 결과를 ajax로 반환합니다.

(1) 대용량 파일을 다운로드하는 경우 일반적으로 시간이 오래 걸리며 PHP는 기본 실행 시간은 일반적으로 30초입니다. 이 시간을 초과하면 다운로드가 실패하므로 시간 초과를 설정해야 합니다. `set_time_limit(0);``set_time_limit(0);`

该语句说明函数执行不设置超时时间。另一个需要设置的就是内存使用,设置`ini_set('memory_limit', '128M');`

이 문은 시간 초과가 설정되지 않았음을 나타냅니다. 기능 실행을 위해. 설정해야 할 또 다른 사항은 메모리 사용량입니다. `ini_set('memory_limit', '128M');`을 설정하세요.

(2) 다운로드 시 파일 이름이 깨질 수 있습니다. 물론 파일 이름에 중국어나 특수 문자가 포함된 경우 이러한 상황이 발생합니다. 이 경우 헤더를

$contentDispositionField = 'Content-Disposition: attachment; '
                    . sprintf('filename="%s"; ', basename($file))      
                    . sprintf("filename*=utf-8''%s", basename($file));   
header($contentDispositionField);

(3 )으로 설정할 수 있습니다. 다운로드 버퍼 크기는 서버 대역폭에 따라 설정할 수 있으며 일반적으로 4096이면 충분합니다

(4) 다운로드할 때 에코 버퍼 뒤에 sleep(1)을 설정하여 프로그램을 절전 모드로 전환할 수 있습니다

(5) 설정하기 전에 HEADER, OB_CLEAN () CACHE 컨텐츠를 지우십시오

4. 네트워크 파일 크기 가져오기

function forceDownload($file = '')
{
    set_time_limit(0);     //超时设置
    ini_set('memory_limit', '128M');    //内存大小设置
    ob_clean();
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");
    $contentDispositionField = 'Content-Disposition: attachment; '    
        . sprintf('filename="%s"; ', basename($file))
        . sprintf("filename*=utf-8''%s", basename($file));    //处理文件名称
    header($contentDispositionField);
    header("Content-Transfer-Encoding: binary");
    header("Content-Length: " . filesize($file));
    $read_buffer = 4096;                                    //设置buffer大小
	$handle = fopen($file, 'rb');
	//总的缓冲的字节数
	$sum_buffer = 0;
	//只要没到文件尾,就一直读取
	while (!feof($handle) && $sum_buffer < filesize($file)) {
		echo fread($handle, $read_buffer);
		$sum_buffer += $read_buffer;
	}
	//关闭句柄
	fclose($handle);
	exit;
}

요약:

1. 시간 초과 설정

3. 메모리 제한 설정 4 헤더 앞의 .ob_clean()5. 버퍼 크기 설정

6 메모리 부족을 줄이기 위해 sleep()을 설정할 수 있습니다.

위 내용은 헤더 방식을 통한 PHP 다운로드 파일 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.