路径
basename — 返回路径中的文件名部分
dirname — 返回路径中的目录部分
pathinfo — 返回文件路径的信息
realpath — 返回规范化的绝对路径名
glob — 寻找与模式匹配的文件路径
fnmatch — 用模式匹配文件名
判断
file_exists — 检查文件或目录是否存在
is_dir — 判断给定文件名是否是一个目录
is_file — 判断给定文件名是否为一个正常的文件
is_link — 判断给定文件名是否为一个符号连接
is_readable — 判断给定文件名是否可读
is_writable — 判断给定的文件名是否可写
is_writeable — is_writable 的别名
is_executable — 判断给定文件名是否可执行
is_uploaded_file — 判断文件是否是通过 HTTP POST 上传的
创建、删除、复制、剪切
mkdir — 新建目录
tempnam — 建立一个具有唯一文件名的文件
tmpfile — 建立一个临时文件
symlink — 建立符号连接
link — 建立一个硬连接
rename — 重命名一个文件或目录
unlink — 删除文件
rmdir — 删除目录
copy — 拷贝文件
move_uploaded_file — 将上传的文件移动到新位置
目录
getcwd — 取得当前工作目录
chdir — 改变目录
chroot — 改变根目录
opendir — 打开目录句柄
closedir — 关闭目录句柄
readdir — 从目录句柄中读取条目
scandir — 列出指定路径中的文件和目录
rewinddir — 倒回目录句柄
dir — 返回一个 Directory 类实例
文件信息
stat — 给出(符号连接指向的)文件的信息
lstat — 给出一个文件或符号连接本身的信息
readlink — 返回符号连接指向的目标
linkinfo — 获取一个连接的信息
fstat — 通过已打开的文件指针取得文件信息
clearstatcache — 清除文件状态缓存
filegroup — 取得文件的组
fileowner — 取得文件的所有者
fileperms — 取得文件的权限
filesize — 取得文件大小
filetype — 取得文件类型
fileatime — 取得文件的上次访问时间
filemtime — 取得文件修改时间
touch — 设定文件的访问和修改时间
filectime — 取得文件的 inode 修改时间
fileinode — 取得文件的 inode
打开、关闭、文件指针
fopen — 打开文件或者 URL
fclose — 关闭一个已打开的文件指针
fseek — 在文件指针中定位
ftell — 返回文件指针读/写的位置
feof — 测试文件指针是否到了文件结束的位置
rewind — 倒回文件指针的位置
pclose — 关闭进程文件指针
popen — 打开进程文件指针
读
file_get_contents — 将整个文件读入一个字符串
fgetc — 从文件指针中读取字符
fgets — 从文件指针中读取一行
fscanf — 从文件中格式化输入
fread — 读取文件(可安全用于二进制文件)
fgetcsv — 从文件指针中读入一行并解析 CSV 字段
fgetss — 从文件指针中读取一行并过滤掉 HTML 标记
file — 把整个文件读入一个数组中
parse_ini_file — 解析一个配置文件
parse_ini_string — 解析配置字符串
readfile — 输出文件
fpassthru — 输出文件指针处的所有剩余数据
写
file_put_contents — 将一个字符串写入文件
fflush — 将缓冲内容输出到文件
fwrite — 写入文件(可安全用于二进制文件)
fputs — fwrite 的别名
fputcsv — 将行格式化为 CSV 并写入文件指针
用户、组、权限
chown — 改变文件的用户
chgrp — 改变文件的组
chmod — 改变文件的权限
lchgrp — 修改符号链接的所有组
lchown — 修改符号链接的所有者
空间
disk_free_space — 返回目录中的可用空间
diskfreespace — disk_free_space 的别名
disk_total_space — 返回一个目录的磁盘总大小
其他
flock — 轻便的咨询文件锁定
ftruncate — 将文件截断到给定的长度
umask — 改变当前的 umask
set_file_buffer — stream_set_write_buffer 的别名
realpath_cache_get — 获取真实目录缓存的详情
realpath_cache_size — 获取真实路径缓冲区的大小
windows下文件名不区分大小写,linux下区分
文件上传
/usr/local/php/etc/php.ini
file_uploads = on
upload_tmp_dir = NULL //默认的NULL,为系统临时文件夹
upload_max_filesize = 2
post_max_size = 8m
max_file_uploads=20 一次上传的数量
max_execution_time = 600
max_input_time = 600
memory_limit = 300m
nginx.conf: http{ client_max_body_size 300m; }
<form action="/statistics/api/upload" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
<input type="file" name="input_file">
<input type="file" name="input_file2">
<input type="submit" value="上传">
</form>
if (!isset($_FILES[‘input_file‘])) { exit(‘没有文件被上传。 ‘); }
if ($_FILES[‘input_file‘][‘error‘] > 0) { //或者直接exit;
switch ($_FILES[‘input_file‘][‘error‘]) {
case 1:exit(‘超过了 upload_max_filesize ‘);
case 2:exit(‘超过了 HTML 表单中 MAX_FILE_SIZE ‘);
case 3:exit(‘文件只有部分被上传。 ‘);
case 4:exit(‘没有文件被上传。 ‘);
case 6:exit(‘找不到临时文件夹。 ‘);
case 7:exit(‘文件写入失败。 ‘);
default:exit(‘没有文件被上传。 ‘);
}
}
if ($_FILES[‘input_file‘][‘size‘] > 2000) { exit(‘上传文件太大。 ‘); }
$allowType = [‘gif‘, ‘png‘, ‘jpg‘];
$size = 1000; //1k 字节
$path = ‘./uploads‘;
//通过文件扩展名 判断类型
$suffix = array_pop(explode(‘.‘, $_FILES[‘input_file‘][‘name‘]));
if (!in_array($suffix, $allowType)) {
echo ‘类型不允许‘;
}
//也可以通过MIME 来判断类型
list($mainType, $subType) = explode(‘/‘, $_FILES[‘input_file‘][‘type‘]);
if ($mainType == ‘text‘) {
echo ‘不能上传text文件‘;
}
//移动
$fileName = date(‘YmdHis‘).rand(1000, 9999).‘.‘.$suffix; //重名会覆盖
if( is_uploaded_file( $_FILES[‘input_file‘][‘tmp_name‘] ) ){
if( !move_uploaded_file( $_FILES[‘input_file‘][‘tmp_name‘], $path.‘/‘.$fileName ) ){
exit(‘移动失败‘);
}
}else {
exit(‘上传文件非法‘);
}
下载
1、对于浏览器不能识别的类型,直接用<a href=..>即可
2、对于html、图片等类型,需要发送header头给浏览器
$fileName = "abc.gif";
header( ‘Content-Type: image/gif‘ );
header( ‘Content-Disposition: attachment; filename="‘.$fileName.‘"‘ );
header( ‘Content-Length: ‘.filesize($fileName) );
readfile( $fileName );
3、\Yii::$app->response->sendFile(...)
遍历
function visit($dir, $prefix=‘‘){
if(is_dir($dir)){
echo $prefix.basename($dir).‘/<br>‘;
$child = array_slice(scandir($dir), 2);
foreach($child as $c){
visit($dir.‘/‘.$c, $prefix.‘----‘);
}
}else {
echo $prefix.basename($dir).‘<br>‘;
}
}
复制
function copyDir($src, $dest){
if ( is_dir($src) ){
if ( !is_dir($dest) && !mkdir($dest) ) return false;
$child = array_slice( scandir($src), 2);
foreach ($child as $c) {
if( !copyDir($src.‘/‘.$c, $dest.‘/‘.$c) ) return false;
}
}else {
if( !copy($src, $dest) ) return false;
}
return true;
}
删除
function deleteDir($dir){
if ( is_dir($dir) ) {
$child = array_slice( scandir($dir), 2);
foreach ($child as $c) {
if ( !$this->deleteDir($dir . ‘/‘ . $c) ) return false;
}
if( !rmdir($dir) ) return false;
} else {
if ( !unlink($dir) ) return false;
}
return true;
}