disk_total_space 返回目标磁盘总空间
disk_free_space返回目标磁盘剩余空间
$diskSpaceRes = disk_total_space(__DIR__ ) / pow(1024, 3);
$diskFreeRes = number_format( disk_free_space(__DIR__)/pow(1024,3), 3);
echo sprintf( "%.3f"."", $diskSpaceRes);
echo $diskFreeRes;
filesize 返回目标文件大小(单位:字节)
$file = number_format(filesize('./test.mp4') / pow(1024, 1), 2) ."KB";
echo $file; // 712.05KB
常用简单函数
函数名 | 用途 |
---|---|
is_writable | 判断给定的文件名是否可写 |
is_readable | 判断给定文件名是否可读 |
file_exists | 检查文件或目录是否存在 |
is_file | 判断给定文件名是否为一个正常的文件 |
is_dir | 判断给定文件名是否是一个目录。 |
filemtime | 回文件中的数据块上次被写入的时间(时间戳) |
basename | 返回路径中的文件名部分 |
dirname | 返回路径中的目录部分 |
mkdir | 支持递归的目录创建,参数分别是:目录、权限位、递归创建 |
rmdir | 删除指定的目录,该目录必须是空的,而且要有相应的权限。 |
rename | 重命名一个文件或目录,也可以进行文件移动。 |
copy | 复制文件 |
fopen 用于打开文件或 URL 的函数。它用于创建一个文件指针,使您能够对文件进行读取、写入和其他操作。
mode | 说明 |
---|---|
‘r’ | 只读方式打开,将文件指针指向文件头。 |
‘r+’ | 读写方式打开,将文件指针指向文件头。 |
‘w’ | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
‘w+’ | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
‘a’ | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
‘a+’ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
‘x’ | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。 |
‘x+’ | 创建并以读写方式打开,其他的行为和 ‘x’ 一样。 |
// 打开一个只读模式的文件
$handle = fopen('file.txt', 'r');
// 打开一个只写模式的文件,并将内容写入其中
$handle = fopen('file.txt', 'w');
fwrite($handle, 'Hello, World!');
fclose($handle);
// 打开一个追加模式的文件,并将内容追加到末尾
$handle = fopen('file.txt', 'a');
fwrite($handle, 'More content.');
fclose($handle);
注意:fopen() 打开文件后切记关闭文件指针! fclose();
fread 所读取的字符串, 或者在失败时返回 FALSE。
function fread($stream, int $length): string|false {}
fseek 可以在打开的文件中移动文件指针的位置,以便在不同位置进行读取和写入操作。
0 表示成功,返回 -1 表示失败
$handle
:打开的文件指针资源。
$offset
:要移动的字节数。
$whence
(可选):指定偏移量的基准位置。可使用以下常量之一:
SEEK_SET
:从文件开头开始计算偏移量。SEEK_CUR
:从当前位置开始计算偏移量。SEEK_END
:从文件末尾开始计算偏移量。$file = fopen('file.txt', 'r');
// 将文件指针移动到文件的第 10 个字节处
fseek($file, 10, SEEK_SET);
// 从当前位置向后移动 5 个字节
fseek($file, 5, SEEK_CUR);
// 从文件末尾向前移动 20 个字节
fseek($file, -20, SEEK_END);
fclose($file);
//例子:
$data = "./test.txt";
$f = fopen($data,'r');
fseek($f,200, 0);
$content = "";
while (!feof($f)){
$content .= fread($f , 1024);
}
fclose($f);
echo $content;
**fwrite 写入文件,返回写入的字符数,出现错误时则返回 ** FALSE
fclose 关闭一个已打开的文件指针
feof 测试文件指针是否到了文件结束的位置
$handle = fopen('./text.txt','w+');
fwrite($handle,'Hello php');
fseek($handle, 0);
echo fread($handle, 999);
fclose($handle);
fgetc 读取一个字符
fgets 读取一行内容
fgetss 从文件指针中读取一行并过滤掉 HTML 标记。参数分别表示:资源对象、读取数量、允许标签。
fgetcsv 从文件指针中读入一行并解析 CSV 字段。
readfile 读取文件全部内容 (大文件慎用)
$data = './test.txt';
$handle = fopen($data,'r+');
while ($s = fgetc($handle)){
echo $s;
}
while ($s = fgets($handle)){
echo $s;
}
fclose($handle);
$handle = fopen('index.html','rb');
while(!feof($handle)){
echo fgetss($handle,20,''
);
}
fclose($handle);
$data = './customer.csv';
$handle = fopen($data,'r');
while (($res = fgetcsv($handle) )!== false){
print_r($res);
}
fclose($handle);
header('Content-type:image/jpeg');
readfile('user.jpeg');
flock 锁定文件操作,如果使用flock
锁定文件,必须保证在所有使用文件地方执行 flock
才有意义。如果过早的系统因为不支持锁定操作,函数执行将没有效果如 FAT 系统。
锁定方式 | 说明 |
---|---|
LOCK_SH | 取得共享锁定(读取的程序) |
LOCK_EX | 取得独占锁定(写入的程序) |
LOCK_UN | 释放锁定(无论共享或独占) |
LOCK_NB | 无法建立锁定时,此操作可不被阻断,马上返回进程。通常与 LOCK_SH 或 LOCK_EX 做 OR(|)组合使用。(Windows 系统上还不支持) |
//写锁 LOCK_SH
// 1.php
$handle = fopen('demo.txt','rb');
$stat = flock($handle,LOCK_SH);
sleep(5);
echo fgetss($handle);
flock($handle,LOCK_UN);
//2.php
$handle = fopen('demo.txt','rb');
$stat = flock($handle,LOCK_SH);
echo fgetss($handle);
flock($handle,LOCK_UN);
//读锁 LOCK_EX
//1.php
$handle = fopen('demo.txt','rb');
$stat = flock($handle,LOCK_EX);
sleep(5);
echo fgetss($handle);
flock($handle,LOCK_UN);
//2.php
$handle = fopen('demo.txt','rb');
$stat = flock($handle,LOCK_SH);
echo fgetss($handle);
flock($handle,LOCK_UN);
防止阻塞
//1.php
$handle = fopen('demo.txt','ab');
$stat = flock($handle,LOCK_EX);
sleep(5);
echo fgetss($handle);
flock($handle,LOCK_UN);
//2.php
$handle = fopen('demo.txt','ab');
$stat = flock($handle,LOCK_SH | LOCK_NB,$wouldblock);
if($stat){
$d = fwrite($handle,'Hello Php!');
echo fgetss($handle);
}else{
echo 'file is locked';
}
flock($handle,LOCK_UN);
file_put_contents 将一个字符串写入文件。
file_get_content 将整个文件读入一个字符串,如果打开远程文件需要开启 php.ini 中的 allow_url_fopen
选项。
file_put_contents('demo.txt','hello php',FILE_APPEND); //FILE_APPEND 文件后面追加
file_get_contents('demo.txt');
file_get_contents('https://bing.com');
var_export
输出或返回一个变量的字符串表示。
下面是将数组保存到文件中的代码,并支持 include 获取数组数据。
$user = [
['name'=>'刘备'],
['name'=>'关羽'],
['name'=>'张飞']
];
$content =var_export($user,true);
file_put_contents('users.php','.$content.';');
opendir 函数类似于 fopen 操作方式,可能获取目录指针读取目录
scandir 列出指定路径中的文件和目录
$handle = opendir('../php');
while (false!==($file = readdir($handle))) {
if (!in_array($file, ['.','..'])) {
echo filetype($file)."\t".$file.'
';
}
}
closedir($handle);
foreach (scandir('../php') as $file) {
if (!in_array($file, ['.','..'])) {
echo filetype($file)."\t\t".$file.'
';
}
}
glob 寻找与模式匹配的文件路径。
选项 | 说明 |
---|---|
GLOB_MARK | 在每个返回的项目中加一个斜线 |
GLOB_NOSORT | 按照文件在目录中出现的原始顺序返回(不排序) |
GLOB_NOCHECK | 如果没有文件匹配则返回用于搜索的模式 |
GLOB_ERR | 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误 |
GLOB_BRACE | 设置多个匹配模式,如:{.php,.txt} |
遍历目录
$files = glob('../../*');
print_r($files);
指定检索文件类型
$files = glob('*.php', GLOB_ERR);
设置多个匹配模式
$files = glob("{*.php,*.txt}", GLOB_BRACE);
print_r($files);
目录大小
function dirSize($dir):int
{
$size= 0;
foreach (glob($dir.'/*') as $file) {
$size += is_file($file)?filesize($file):dirSize($file);
}
return $size;
}
echo round(dirSize('/home/vagrant')/1024/1024).'MB';
删除目录
function delDir($dir):bool
{
if (!is_dir($dir)) {
return true;
}
foreach (glob($dir.'/*') as $file) {
is_file($file)?unlink($file):delDir($file);
}
return rmdir($dir);
}
delDir('../php2');
复制目录
function copyDir($dir, $to):bool
{
is_dir($to) or mkdir($to, 0755, true);
foreach (glob($dir.'/*') as $file) {
$target = $to.'/'.basename($file);
is_file($file)?copy($file, $target):copyDir($file, $target);
}
return true;
}
copyDir('../php', '../php2');
移动目录
移动目录分两步执行,第一步是复制目录,第二步是删除目录,所以使用上面两个函数的综合即可以。
function moveDir($dir, $to):bool
{
copyDir($dir, $to);
return delDir($dir);
}