php 文件

路径

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下区分

 

文件上传

 

POST上传

 

/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;

}

 

posted @ 2020-05-26 18:07  是的哟  阅读(251)  评论(0编辑  收藏  举报