php如何使用lib文件下载,php应用开发之文件下载详解

1,php下载函数

借助header()函数与readfile()函数实现文件下载功能。

function DownloadFile($filename)

{

// Check filename

if (empty($filename) || !file_exists($filename))

{

return FALSE;

}

// Create download file name to be displayed to user

$saveasname = basename($filename);

// Send binary filetype HTTP header

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

// Send content-length HTTP header

header('Content-Length: '.filesize($filename));

// Send content-disposition with save file name HTTP header

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

// Output file

readfile($filename);

// Done

return TRUE;

}

?>

2,php文件下载脚本

更完善的php下载的自定义函数。

//

// DOWNLOAD.PHP -- Download Utility

// Get download file id (assume it's passed as a form or URL parameter)

$id = getGlobalVar('id', 1);

// Check download file id parameter, get download file name, download file

// (assuming (global) variable $id specifies download file id)

if (empty($id) || !DownloadFile(getDownloadFileName($id)))

{

die("No Download!");

}

// Only functions beyond this point

function getDownloadFilename($fileid)

// Get download file pathname

// Returns: download file pathname

// Parameters:

// $fileid : File identifier

{

// Download file list

$DLFILES = array(

'TOOL1' => 'download/tool1_v30.exe',

'PROG2' => 'download/prog2setup.exe',

);

// Get/check download file name

if (empty($fileid) || empty($DLFILES[$fileid]))

{

return '';

}

// Set base directory to document root directory

// (could also be set to a directory outside document root!)

$basedir = getGlobalVar('DOCUMENT_ROOT');

// Build and return download file name

return $basedir.'/'.$DLFILES[$fileid];

}

function DownloadFile($filename)

// Download file

// Returns: TRUE if download successfully started, FALSE if download failed

// Parameters:

// $filename : Download file pathname

{

// Verify filename

if (empty($filename) || !file_exists($filename))

{

return FALSE;

}

// Create download file name to be displayed to user

$saveasname = basename($filename);

// Send binary filetype HTTP header

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

// Send content-length HTTP header

header('Content-Length: '.filesize($filename));

// Send content-disposition with save file name HTTP header

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

// Output file

readfile($filename);

// Download successfully started

return TRUE;

}

function getGlobalVar($g, $formflag = 0)

// Get global PHP variable value

// Returns: global variable value or empty string if not available

// Parameters:

// $g : Global PHP variable name

// $formflag : Flag - global var from GET/POST input

{

if (empty($g))

{

return 0;

}

// Try superglobal access (PHP 4.1.0+)

if ($formflag)

{

if (isset($_POST[$g]))

{

return $_POST[$g];

}

if (isset($_GET[$g]))

{

return $_GET[$g];

}

if (isset($_REQUEST[$g]))

{

return $_REQUEST[$g];

}

}

else

{

if (isset($_SERVER[$g]))

{

return $_SERVER[$g];

}

if (isset($_ENV[$g]))

{

return $_ENV[$g];

}

}

// Try superglobal access (PHP 3.0.0+)

if (isset($GLOBALS[$g]))

{

return $GLOBALS[$g];

}

// Try global variable access (PHP 3+)

global $$g;

if (!empty($$g))

{

return $$g;

}

// Assume global variable empty/not set

return '';

}

?>

将以上脚本保存为dl.php,在应用时传入id参数即可。

例如:

Download Program 2

也可以通过php的重定向语句Location来实现,例如:

header("Location: http://www.YourDomain.com/dl.php?id=PROG2");

exit;

?>

以上的代码,可以防止用户直接访问下载文件,起到了一定的文件保护,甚至是防盗链的功能。

以下的代码,可以依据http头信息,作些介绍,从而提供更安全的文件下载。

代码:

lse;">

function DownloadFile($filename)

{

// Check filename

if (empty($filename) || !file_exists($filename))

{

return FALSE;

}

// Create download file name to be displayed to user

$saveasname = basename($filename);

// Send binary filetype HTTP header

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

// Send content-length HTTP header

header('Content-Length: '.filesize($filename));

// Send content-disposition with save file name HTTP header

// (using workaround for MSIE 5.5 SP1 / MSIE 6.01 bugs/problems)

$browser = getGlobalVar('HTTP_USER_AGENT');

if (strstr('MSIE 5.5', $browser)

|| strstr('MSIE 6.01', $browser))

{

header('Content-Disposition: filename="'.$saveasname.'"');

}

else

{

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

}

// Send Content-Transfer-Encoding HTTP header

// (use binary to prevent files from being encoded/messed up during transfer)

header('Content-Transfer-Encoding: binary');

// Output file

readfile($filename);

// Done

return TRUE;

}

function getGlobalVar($g, $formflag = 0)

// Get global PHP variable value

// Returns: global variable value or empty string if not available

// Parameters:

// $g : Global PHP variable name

// $formflag : Flag - global var from GET/POST input

{

if (empty($g))

{

return 0;

}

// Try superglobal access (PHP 4.1.0+)

if ($formflag)

{

if (isset($_GET[$g]))

{

return $_GET[$g];

}

if (isset($_POST[$g]))

{

return $_POST[$g];

}

if (isset($_REQUEST[$g]))

{

return $_REQUEST[$g];

}

}

else

{

if (isset($_SERVER[$g]))

{

return $_SERVER[$g];

}

if (isset($_ENV[$g]))

{

return $_ENV[$g];

}

}

// Try superglobal access (PHP 3.0.0+)

if (isset($GLOBALS[$g]))

{

return $GLOBALS[$g];

}

// Try global variable access (PHP 3+)

global $$g;

if (!empty($$g))

{

return $$g;

}

// Assume global variable empty/not set

return '';

}

?>

function DownloadFile($filename)

{

// Check filename

if (empty($filename) || !file_exists($filename))

{

return FALSE;

}

// Create download file name to be displayed to user

$saveasname = basename($filename);

// Send binary filetype HTTP header

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

// Send content-length HTTP header

header('Content-Length: '.filesize($filename));

// Send content-disposition with save file name HTTP header

// (using workaround for MSIE 5.5 SP1 / MSIE 6.01 bugs/problems)

$browser = getGlobalVar('HTTP_USER_AGENT');

if (strstr('MSIE 5.5', $browser)

|| strstr('MSIE 6.01', $browser))

{

header('Content-Disposition: filename="'.$saveasname.'"');

}

else

{

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

}

// Send Content-Transfer-Encoding HTTP header

// (use binary to prevent files from being encoded/messed up during transfer)

header('Content-Transfer-Encoding: binary');

// Output file

readfile($filename);

// Done

return TRUE;

}

function getGlobalVar($g, $formflag = 0)

// Get global PHP variable value

// Returns: global variable value or empty string if not available

// Parameters:

// $g : Global PHP variable name

// $formflag : Flag - global var from GET/POST input

{

if (empty($g))

{

return 0;

}

// Try superglobal access (PHP 4.1.0+)

if ($formflag)

{

if (isset($_GET[$g]))

{

return $_GET[$g];

}

if (isset($_POST[$g]))

{

return $_POST[$g];

}

if (isset($_REQUEST[$g]))

{

return $_REQUEST[$g];

}

}

else

{

if (isset($_SERVER[$g]))

{

return $_SERVER[$g];

}

if (isset($_ENV[$g]))

{

return $_ENV[$g];

}

}

// Try superglobal access (PHP 3.0.0+)

if (isset($GLOBALS[$g]))

{

return $GLOBALS[$g];

}

// Try global variable access (PHP 3+)

global $$g;

if (!empty($$g))

{

return $$g;

}

// Assume global variable empty/not set

return '';

}

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值