欢迎访问宙启技术站
智能推送

PHP文件上传和下载函数的使用

发布时间:2023-06-11 15:35:50

PHP是一种流行的Web开发语言,用于开发动态网站和Web应用程序。在开发Web应用程序时,有时需要上传和下载文件。PHP提供了一些内置的函数来帮助开发人员处理这些任务。本文将介绍PHP文件上传和下载函数的使用。

PHP文件上传函数

文件上传是指将本地文件复制到服务器上的过程。在PHP中,可以使用以下函数来处理文件上传:

1. move_uploaded_file()

move_uploaded_file()函数用于将上传的文件从临时目录移动到指定的目录中。

语法:

bool move_uploaded_file(string $filename, string $destination)

参数说明:

$filename:上传的文件名,包括路径和文件名。

$destination:要将文件移动到的目标目录。可以是一个绝对路径或相对路径。

返回值:

如果移动成功,返回true,否则返回false。

示例:

$filename = $_FILES["file"]["tmp_name"];

$destination = "uploads/" . $_FILES["file"]["name"];

if (move_uploaded_file($filename, $destination)) {

    echo "文件已上传.";

} else {

    echo "上传失败.";

}

2. is_uploaded_file()

is_uploaded_file()函数用于检查指定的文件是否为上传文件。如果是,返回true;否则返回false。

语法:

bool is_uploaded_file(string $filename)

参数说明:

$filename:要检查的文件名。

返回值:

如果文件是上传文件,返回true,否则返回false。

示例:

$filename = $_FILES["file"]["tmp_name"];

if (is_uploaded_file($filename)) {

    echo "这是一个上传文件.";

} else {

    echo "这不是一个上传文件.";

}

3. mkdir()

mkdir()函数用于创建一个目录。

语法:

bool mkdir(string $pathname, int $mode = 0777, bool $recursive = false, resource $context = null)

参数说明:

$pathname:要创建的目录路径。

$mode:目录权限,可选,默认为0777。

$recursive:如果为true,将尝试创建多层目录。默认为false。

$context:一个资源句柄,可以用于指定上下文选项。默认为null。

返回值:

如果成功,返回true,否则返回false。

示例:

$dir = "uploads/";

if (!file_exists($dir)) {

    mkdir($dir);

}

4. $_FILES全局变量

$_FILES是一个包含上传文件信息的全局数组。通过$_FILES可以访问上传文件的属性,例如文件名、文件类型、文件大小等。

示例:

echo "文件名:" . $_FILES["file"]["name"] . "<br>";

echo "文件类型:" . $_FILES["file"]["type"] . "<br>";

echo "文件大小:" . ($_FILES["file"]["size"] / 1024) . " KB<br>";

echo "临时文件名:" . $_FILES["file"]["tmp_name"] . "<br>";

PHP文件下载函数

文件下载是指将服务器上的文件复制到本地计算机上的过程。在PHP中,可以使用以下函数来处理文件下载:

1. readfile()

readfile()函数用于读取文件并输出到浏览器中。

语法:

int readfile(string $filename, bool $use_include_path = false, resource $context = null)

参数说明:

$filename:要读取和输出的文件名。

$use_include_path:如果为true,则使用include_path搜索文件。

$context:可选的上下文句柄,用于指定上下文选项。

返回值:

如果成功,返回读取的字节数。

示例:

$filename = "files/document.pdf";

header('Content-type: application/pdf');

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

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

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

header('Accept-Ranges: bytes');

readfile($filename);

2. fopen()

fopen()函数用于打开一个文件并返回一个文件指针。

语法:

resource fopen(string $filename, string $mode, bool $use_include_path = false, resource $context = null)

参数说明:

$filename:要打开的文件名,包括路径和文件名。

$mode:文件打开模式,可选项包括'r', 'w', 'a', 'x'等。

$use_include_path:如果为true,则使用include_path搜索文件。

$context:可选的上下文句柄,用于指定上下文选项。

返回值:

如果成功,返回一个文件指针。

示例:

$filename = "files/document.pdf";

$handle = fopen($filename, "r");

header('Content-type: application/pdf');

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

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

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

header('Accept-Ranges: bytes');

fpassthru($handle);

fclose($handle);

3. header()

header()函数用于设置HTTP头信息。

语法:

header('Content-type: mime-type');

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

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

header('Content-Length: filesize');

header('Accept-Ranges: bytes');

参数说明:

Content-type:文件MIME类型。

Content-Disposition:指定文件下载方式,如inline或attachment。

Content-Transfer-Encoding:指定传输编码,如binary。

Content-Length:文件大小。

Accept-Ranges:指定服务器接受的范围,如bytes。

示例:

$filename = "files/document.pdf";

header('Content-type: application/pdf');

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

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

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

header('Accept-Ranges: bytes');

readfile($filename);

总结

PHP提供了一些便捷的文件上传和下载函数,开发人员可以根据自己的需求选择使用何种函数。在文件上传时,要先检查文件是否为上传文件,然后将文件移动到指定目录中;在文件下载时,要设置HTTP头信息,并将文件读取并输出到浏览器中。在操作文件的过程中,也需要注意文件的权限和路径等问题。