1. 云栖社区>
  2. PHP教程>
  3. 正文

php应用开发之文件下载详解

作者:用户 来源:互联网 时间:2017-12-01 12:14:59

开发文件下载

php应用开发之文件下载详解 - 摘要: 本文讲的是php应用开发之文件下载详解, 1,php下载函数借助header()函数与readfile()函数实现文件下载功能。 <?php function DownloadFile($filename) { // Check filename if (e

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

<?php 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下载的自定义函数。

<?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参数即可。

例如:
<a href="http://www.YourDomain.com/dl.php?id=PROG2">Download Program 2</a>
也可以通过php的重定向语句Location来实现,例如:

<?phpheader("Location: http://www.YourDomain.com/dl.php?id=PROG2");exit;?>

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

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

代码:

<?php 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 ''; } ?> <?php 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 ''; } ?> 

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索开发 文件下载 ,以便于您获取更多的相关知识。