日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

php文件安全实现方法,php安全下载大文件的实现代码

發(fā)布時間:2024/9/3 php 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php文件安全实现方法,php安全下载大文件的实现代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

先來看下一般文件的安全下載方法: 代碼示例:

php

/**

* 一般文件安全下載

* edit www.#

*/

$durl = 'file/phpcms2008_o2abf32efj883c91a.iso';

$filename = 'phpcms2008_o2abf32efj883c91a.iso';

$file = @fopen($durl, 'r');

header("Content-Type: application/octet-stream");

header("Accept-Ranges:??? bytes");

header("Accept-Length:??? ".filesize($durl));

header("Content-Disposition:??? attachment;??? filename=".$filename);

echo?? fread($file,filesize($durl));

fclose($file);

?>

以上的代碼,在遇到大文件時,超過php.ini配置的內(nèi)存最大值的文件時,服務器會非常占用CPU資源,文件不能正常下載,只能下載幾十Kb的文件。

可以用下面的代碼來解決: 代碼示例:

/**

* 大文件

安全下載的實現(xiàn)代碼

* edit www.#

*/

function download($url, $filename) {

// 獲得文件大小, 防止超過2G的文件, 用sprintf來讀

$filesize = sprintf ( "%u", filesize ( $url ) );

if (! $filesize) {

return;

}

header ( "Content-type:application/octet-stream\n" ); //application/octet-stream

header ( "Content-type:unknown/unknown;" );

header ( "Content-disposition: attachment; filename=\"" . $filename . "\"" );

header ( 'Content-transfer-encoding: binary' );

if ($range = getenv ( 'HTTP_RANGE' )) { // 當有偏移量的時候,采用206的斷點續(xù)傳頭

$range = explode ( '=', $range );

$range = $range [1];

header ( "HTTP/1.1 206 Partial Content" );

header ( "Date: " . gmdate ( "D, d M Y H:i:s" ) . " GMT" );

header ( "Last-Modified: " . gmdate ( "D, d M Y H:i:s", filemtime ( $url ) ) . " GMT" );

header ( "Accept-Ranges: bytes" );

header ( "Content-Length:" . ($filesize - $range) );

header ( "Content-Range: bytes " . $range . ($filesize - 1) . "/" . $filesize );

header ( "Connection: close" . "\n\n" );

} e

lse {

header ( "Content-Length:" . $filesize . "\n\n" );

$range = 0;

}

loadFile ( $url );

}

function loadFile($filename, $retbytes = true) {

$buffer = '';

$cnt = 0;

$handle = fopen ( $filename, 'rb' );

if ($handle === false) {

return false;

}

while ( ! feof ( $handle ) ) {

$buffer = fread ( $handle, 1024 * 1024 );

echo $buffer;

ob_flush ();

flush ();

if ($retbytes) {

$cnt += strlen ( $buffer );

}

}

$status = fclose ( $handle );

if ($retbytes && $status) {

return $cnt; // return num. bytes delivered like readfile() does.

}

return $status;

}

?>

調(diào)用示例: 代碼示例:

//大文件的安全下載

dow

nload($url, $filename);

總結(jié)

以上是生活随笔為你收集整理的php文件安全实现方法,php安全下载大文件的实现代码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。