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 중국어 웹사이트의 기타 관련 기사를 참조하세요!