PHP(9)文件编程
一、文件夹操作
1. 新增文件夹
- 即使存在也不会停止运行
- 一般会加上错误抑制符。
<?php
//在当前目录创建upload文件夹
@mkdir('upload');
// 据对路径创建文件夹
@mkdir('D:/server/Web/image');
2. 删除文件夹
-
即使不存在也不会停止运行
-
一般会加上错误抑制符。
-
文件夹里如果有文件,会返回 false
<?php
@rmdir('upload');
@rmdir('D:/server/Web/image');
$res = @rmdir('D:/server/Web');
var_dump($res); // false
3. 修改文件夹
- 文件和文件夹都可以用
rename
修改 - 一般会加上错误抑制符
<?php
@mkdir('upload');
sleep(5);
@rename('upload', 'UPLOAD');
4. 读取文件夹
- 读取文件夹中所有文件名
- 有两种方式:
- scandir:得到该文件夹下所有文件名。
- 通过 opendir 得到资源,然后使用 readdir 进行手动访问。
scandir
<?php
$dir = scandir('D:/phpstudy_pro/WWW');
foreach ($dir as $k => $v){
echo "第{$k}个文件的名字是{$v} <br>";
}
opendir + readdir
<?php
$dir = opendir('D:/phpstudy_pro/WWW');
// 判断路径是否有效打开
if ($dir) {
for ($i = 0; $i < 10; $i++) {
$filename = readdir($dir);
if ($filename === false) break;
echo $filename . "<br>";
}
closedir($dir);
}
<?php
$dir = opendir('D:/phpstudy_pro/WWW');
// 判断路径是否有效打开
$filename = readdir($dir);
while ($filename){
echo $filename . "<br>";
$filename = readdir($dir);
}
closedir($dir);
5. 其他常用操作
- 为了减少代码出错率,需要使用系统函数来判定有效性。
- is_dir(目录):判断是否是路径,返回布尔型
- getcwd():获取当前工作路径
- rewinddir(目录资源):将 opendir 打开的资源指针重新指回第一个
- chdir(目录):修改当前工作路径。
二、文件操作
1. 打开文件
- fopen(文件名,操作模式):打开文件并且得到文件资源,如果文件不存在则创建文件。
- fclose:关闭文件资源。
2. 删除文件
- unlink(文件名):将文件名指向磁盘实际存储数据(磁道)的链接断开。返回布尔型。
- 通常增加一个错误抑制符。
3. 修改文件
- 修改文件名用 rename;
- 必须先 fopen 打开文件,用完资源后关闭资源。
- fwrite(文件资源,字符串内容):将内容写入文件。
4. 读取文件
- 必须先 fopen 打开文件,用完资源后关闭资源。
- fread(文件资源,读取长度):按照长度读取资源,且最多读取一行。
- 如果需要读取全部内容,使用
feof
函数判定资源。读完返回true,没读完返回false。
<?php
$file = @fopen('index.html', 'r');
while (!feof($file)){
echo fread($file, 1024);
}
fclose($file);
5. 新系统函数
- file_get_contents(文件路径):读取全部内容,也可以读取网络资源。
- file_put_contents(文件路径,内容字符串[,写入方式]):没有文件自动创建,默认覆盖原有内容。
6. 文件操作常用函数
- file(文件路径):将整个文件以行为单位读取,返回一个数组
- fgetc(文件资源):一次读取一个字符
- fgets(文件资源):一次读取一行
- file_exists(文件路径):判定一个文件或目录是否存在
- fseek(文件资源, 指针位置):指定 fopen 打开的资源指针位置
- fileatime(文件路径):获取文件最后访问时间
- filemtime(文件路径):获取文件最后修改时间
- filesize(文件路径):获取文件大小
三、递归遍历文件夹
- 递归点:当前的结果是一个文件夹。
- 递归出口:不是文件夹或文件夹没有文件。
<?php
function myScanDir($dir){
// 判定路径是否有效
is_dir($dir) or die('当前不是一个目录!');
// 是文件夹
$file = scandir($dir);
foreach ($file as $value){
echo $value . "<br>";
// 排除 . 和 ..
if ($value == '.' || $value == '..') continue;
$tempFile = $dir . '/' . $value;
// 递归点:是一个目录继续遍历
if (is_dir($tempFile)){
myScanDir($tempFile);
}
}
}
$dir = 'D:/phpstudy_pro/WWW';
myScanDir($dir);