首页 » PHP » PHP文件与目录操作

基础函数列表

函数说明
array file($filename)将文件内容读到一个数组。
string file_get_contents($filename)将文件内容读到一个字符串中。
string fgets($handle)以行为单位从文件读取内容。
string fread($handle, $length)二进制安全的读文件。
bool unlink($filename)删除文件。

路径分析

mixed pathinfo(string $path[, int $options]);

$options有几个取值:

  • PATHINFO_DIRNAME - 获取路径。如PATH/file.ext的输入,将返回PATH,移除了最末的/file.ext。
  • PATHINFO_BASENAME - 获取文件名加后缀。如PATH/file.ext的输入,将返回file.ext。等同于basename()的效果。
  • PATHINFO_EXTENSION - 获取文件后缀。如PATH/file.ext的输入,将返回ext。
  • PATHINFO_FILENAME - 获取文件名无后缀。如PATH/file.ext的输入,将返回file。

以下是一个简单示例:

PATHINFO_DIRNAME of /codes/php/file.ext: /codes/php
PATHINFO_DIRNAME of codes/php/file.ext: codes/php
PATHINFO_DIRNAME of ./file.ext: .
PATHINFO_BASENAME of /codes/php/file.ext: file.ext
basename() of /codes/php/file.ext: file.ext
PATHINFO_EXTENSION of /codes/php/file.ext: ext
PATHINFO_FILENAME of /codes/php/file.ext: file

$options可以省略,则返回一个关联数组,包括以上所有信息。$options也可以是以上几个取值的与操作,则直接返回目标信息。

string basename(string $path[, string $suffix]);

basename()基本等同于pathinfo($path, PATHINFO_BASENAME)。根据$suffix参数,可以把文件后缀给移除,例如:

basename("/codes/php/file.ext", ".ext")   # return file

文件元信息

有几个函数获取文件元信息(meta info)。

array stat(string $filename);           // 文件元信息
array lstat(string $filename);          // 文件(包括符号连接)元信息
array fstat(resource $handler);         // 用打开的文件指针获取元信息

int filectime(string $filename);        // 文件修改时间(change time)
int fileatime(string $filename);        // 文件最后一次访问时间
int filemtime(string $filename);        // 文件内容修改时间(modification time)

第一组函数(stat系列)其实是Linux C函数的一个映射:

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>

int stat(const char *path, struct stat *buf);
int fstat(int filedes, struct stat *buf);
int lstat(const char *path, struct stat *buf);

第二组函数(filextime系列)又是对第一组函数的封装。

上传文件

上传一个文件的HTML代码:

<input type='file' name='file' />

对应的PHP代码:

$tmp_file = $_FILES["file"]["tmp_name"];
$file = $_FILES["file"]["name"];
move_uploaded_file($tmp_file, "/upload/path/$file");

上传多个文件的HTML代码:

<input type='file' name='file[]' multiple />

对应的PHP代码:

$idx = 0;
foreach($_FILES["file"]["name"] as $filename) {
    $src = $_FILES["file"]["tmp_name"][$idx++];
    $dst = "/upload/path/" . basename($filename);
    move_uploaded_file($src, $dst);
}

下载文件

让PHP提供文件下载的功能。例如将一份报表以CSV格式下载,或下载一份二进制的文件,如图片、Gzip压缩文件等。

提供二进制文件下载

PHP提供二进制文件下载的代码框架:

$file = "images/berlinix.png";

header("Content-Description: Berlinix Logo File");
header("Content-Type: application/octet-stream");
header("Content-Disposition: attchment; filename=" . basename($file));
header("Content-Transfer-Encoding: binary");
header("Expires: 0");
header("Cache-Control: must-revalidate");
header("Pragma: public");
header("Content-Length: " . filesize($file));

ob_clean();
flush();

readfile($file);

exit();

readfile()将文件内容输出,其函数原型为:

int readfile(string filename [, bool $use_include_path = false [, resource $context ]] );

分享

0