PHP核心编程--目录操作(包含文件操作)
一.目录操作
1. 创建目录
创建目录mkdir(目录名称) //返回值为布尔

一次性创建主目录及其子目录

判断是不是一个目录is_dir //返回true,false

判断目录或文件是否存在file_exists //返回值为布尔


返回路径中的目录部分 dirname


2. 打开目录,
opendir — 打开目录句柄
opendir(目录路径) //返回的是一个目录句柄.

readdir(目标句柄) //读取目录中的条目,

目录名为零的处理

//目录名中文的处理 iconv(in_charset, out_charset, str) //说明: //将字符串由in_charset字符集 转为 out_charset字符集 //如: iconv(‘gbk’, ‘utf-8’, $str); //将$str由字符集gbk,转为utf-8;

3. 关闭目录
Closedir(目标句柄);//关闭目录,是为了释放内存资源.
有打开必须有关闭. Opendir,与closedir成对出现.


4. 目录重命名, 移动目录
rename(oldname, newname) //将oldname修改为newname; //返回值为布尔


5. 删除目录,
rmdir(目录名称) //返回值为布尔

二.文件操作
1. 打开文件
打开文件的方式fopen
fopen(文件路径,打开模式); //返回的文件句柄;


is_file 文件判断,返回布尔.

2. 关闭文件
fopen //返回的文件句柄
fclose(文件句柄); //释放内存资源
有打开就有关闭.
3. 写入文件
fwrite(文件句柄,字符串);

4. 读取文件内容:
1) 读取一个字符(字节)
fgetc(文件句柄)

对读取到0时的处理:

2) 读取一行字符
fgets

实例图片计时器
<?php
// 图片计数器 // 第一步:对计数器文本文件进行初始化,也就是创建计数器文件,并将0写入
$filename = './count.txt';
if (!file_exists($filename)) {
// 以写入的方法打开,返回文件句柄
$handle = fopen($filename,'w');
// 将0写入
fwrite($handle,0);
// 关闭句柄
fclose($handle);
}
// 第二步:按行 读取 计数器中的数字,同时将数字加1,将新数字写入到计数器文本中
$handle = fopen($filename,'r+');//以r+模式打开文件,由于在此模式下可读可写
$line = fgets($handle); //将计数器中的数字读取,788
$line++; //789
// 将加1后的新数字写入计数器
rewind($handle); //将指针复位
fwrite($handle,$line);//将789写入计数器
fclose($handle); // 第三步:按字符读取 将计数器中的数字,一个一个读取,同时将读取的数字和image目录中的图片名称进行匹配
$handle = fopen($filename,'r');
// 循环一个一个的读取计数器中的数字
while (false !== ($char = fgetc($handle))) {
echo "<img src=images/$char.jpg />";
}
fclose($handle);
?>

3) 读取指定大小的内容,
fread(文件句柄,长度); //说明,长度的单位是字节

feof(文件句柄) //文件的指针在文件的末尾

4) 不用打开和关闭
直接将文件读入字符串 file_get_contents
直接将字符串写入文件 file_put_contents

5. 拷贝文件



5) 删除一个目录中所有子目录及文件
Rmdir //只能删除空目录
Unlink//只能删除文件
删除整个文件夹(里面包含文件)的小例子:
<?php
// 删除一个目录中所有子目录和文件
// rmdir 只能删除文件目录
// unlink
// 定义函数 // $filename = './phpMyAdmin';
// $filename = './phpMyAdmin';
/*function delAll($path){
if (is_dir($path) ){
// 如果是目录则打开
$handle = opendir($path);
// 从目录句柄中循环读取
while (false !== ($file = readdir($handle))) {
// 注意此时的.,..必须跳过,否则将删除你当前文件所在磁盘中的所有文件!!!!!
if ($file=='.'||$file=='..') {
continue;
}
// 如果是目录则递归,如果不是目录则直接unlink
if (is_dir($path.'/'.$file) ){
delAll($path.'/'.$file);
}else{
unlink($path.'/'.$file);
} }
closedir($handle);
rmdir($path);
}
}
// 调用函数
delAll($filename)
?>
还有几个经典练习例子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body> <!--
第2题:
题型:代码题
难度:3级
题干:
编写一段程序,递归显示某个指定目录中(如phpMyAdmin)所有子目录及文件。
-->
<?php
$filename = './phpMyAdmin';
function showfiles($path){
$handle = opendir($path);
echo "<ul>";
while (false !== ($file = readdir($handle))){
if ($file =="."|| $file == "..") {
continue;
}
if (is_dir($path.'/'.$file)) {
showfiles($path.'/'.$file);
}else {
echo "<li>$file</li>";
}
}
echo "</ul>";
closedir($handle);
}
showfiles($filename); // 第3题:
// 题型:代码题
// 难度:3级
// 题干:
// 编写一段程序,递归删除某个指定目录中(如phpMyAdmin)所有子目录及文件。
// 提示:在执行删除目录及文件时,一定要过虑掉“.”和“..”,避免删除上层目录中的目录及文件,十分危险。!!!!!!!
$filename = './mytest';
function delfiles($path) {
$handle = opendir($path);
while (false !== ($file = readdir($handle))) {
if ($file=='.'||$file=='..') {
continue;
}
if (is_dir($path.'/'.$file)) {
delfiles($path.'/'.$file);
}else {
// 删除文件
unlink($path.'/'.$file);
}
}
closedir($handle);
// 删除文件夹
rmdir($path);
} delfiles($filename); // 第4题:
// 题型:代码题
// 难度:3级
// 题干:
// 编写一段程序,用图片来实现访问量效果。当每次进入该页面,访问量加1,访问量值保存到记事本中。读取记事本中访问的数值,并将访问量的每一个数,用对应的图片显示出来。页面最后显示“你是第n位访问者”。
// 提示:参考答案中提供了0到9的数字图片。; $filename = './count.txt';
if (!file_exists($filename)) {
$handle = fopen($filename,'w');
fwrite($handle,0);
fclose($handle);
} $handle = fopen($filename,'r+');
$line = fgets($handle);
$line++;
rewind($handle);
fwrite($handle,$line);
fclose($handle); $handle = fopen($filename,'r');
echo "<span style='color:blue;font-size:30px;font-weight:700'>你是第</span>";
while (false !== ($file=fgetc($handle))) {
echo "<img src=images/$file.jpg />";
}
echo "<span style='color:blue;font-size:30px;font-weight:700'>位访问者!</span>";
fclose($handle); /*
第一题!!!递归应用
复制文件:并且从一个文件夹移动到另一个文件夹*/ $filename = './phpMyAdmin';
// $aimfilename ='./phpMyAdmin_copy';
// $aimfilename ='../student/a/b/c/phpMyAdmin_copy';
function read_copy($dirpath,$aim_path) {
$handle_dir = opendir($dirpath);
while (false !== ($file = readdir($handle_dir))) {
if ($file=='.'||$file=='..') {
continue;
}
if (is_dir($dirpath.'/'.$file)) { //如果是文件夹
if (file_exists($aim_path.'/'.$file)) { //有该文件夹的话
read_copy($dirpath.'/'.$file, $aim_path.'/'.$file);
} else { //没有该文件夹的话
mkdir($aim_path.'/'.$file,0777,true);
read_copy($dirpath.'/'.$file, $aim_path.'/'.$file);
} } else { //如果是文件
if (file_exists($aim_path)) {
copy($dirpath.'/'.$file, $aim_path.'/'.$file);
} else {
mkdir($aim_path,0777,true);
copy($dirpath.'/'.$file,$aim_path.'/'.$file);
} } }
closedir($handle_dir);
}
read_copy($filename,$aimfilename);
?> </body>
</html>
PHP核心编程--目录操作(包含文件操作)的更多相关文章
- paip.c++ qt 目录遍历以及文件操作
paip.c++ qt 目录遍历以及文件操作 作者Attilax , EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/a ...
- 积累的VC编程小技巧之文件操作
1.删除文件夹 // 删除文件夹及其所有内容void CBaseDoc::RemoveFolder(const CString &strPathName){ CString path = ...
- C# 目录下的文件操作
运用DirectoryInfo类的对象我们可以轻松的实现对目录以及和目录中的文件相关的操作,假如你要获得某个目录F:\Pictures下的所有BMP文件,那么通过下面的代码就可以实现该功能. 上面的代 ...
- python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数
目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...
- python-网络安全编程第二天(文件操作)
前言 才吃完火锅嘿嘿,吃完把今天所学的内容写个博客当做笔记用哈哈! 文件操作 f=open("test.txt",w)直接打开一个文件,如果文件不存在则创建文件open模式w:以写 ...
- Linux - 目录结构及文件操作
根目录 “/”:Linux 系统中最高层的目录 这个就是根目录 用 / 表示根目录 bin 目录:存放可执行文件 bin 目录下的文件都是平常使用的命令 在 Linux 系统中,一切都是文件 sbin ...
- Linux目录结构及文件操作
Linux文件目录遵循FHS标准 绝对路径:从根目录开始的路径:相对目录:从当前路径开始的路径 .表示当前目录,..表示上级目录,~表示当前用户的home目录,pwd获得当前绝对路径 新建文件 tou ...
- day4-基础 字符串操作,文件操作,字符转编码
1.字符串用法 name = 'daniel' print(name.capitalize()) #首字母大写 >>>daniel print(name.count('a')) #统 ...
- Go基础--终端操作和文件操作
终端操作 操作终端相关的文件句柄常量os.Stdin:标准输入os.Stdout:标准输出os.Stderr:标准错误输出 关于终端操作的代码例子: package main import " ...
随机推荐
- 一些常见的synthesis attribute
Noprune A Verilog HDL synthesis attribute that prevents the Quartus II software from removing a regi ...
- HTML5 drag拖动事件
参考链接:https://segmentfault.com/a/1190000013606983 例子: <!DOCTYPE HTML> <html> <head> ...
- spring-cloud服务网关中的Timeout设置
本文转载自:https://segmentfault.com/a/1190000014370360 大家在初次使用spring-cloud的gateway的时候,肯定会被里面各种的Timeout搞得晕 ...
- MYSQL数据库练习题操作(select)大全
1.创建表 表一:student学生use) .create table student( sno ) primary key not null comment'学号(主码)', sname ) no ...
- Django项目: 6.新闻详情页
一.功能需求分析 1.功能 新闻详情 加载评论功能 添加评论功能 二.新闻详情页 1.业务流程分析 业务流程: 判断前端传递新闻id是否为空,是否为整数,是否存在 2.接口设计 接口说明: 类目 说明 ...
- String、StringBuffer和StringBuilder源码解析
1.String 1.1类的定义 public final class String implements java.io.Serializable, Comparable<String> ...
- HBase底下的存储机制
Split机制:可以理解为HDFS上Block一分二的情况.每个Table一开始只有一个region,随着数据不断插入表,region不断增大,当增大到一个阀值的时候,Hregion就会等分会两个新的 ...
- Laravel 日志权限问题
laravel发现日志写入不了, 因为此日志是定时任务生成的, 定时任务的执行用户时root 解决方法: 方法1.修改执行定时任务的用户, 不过www用户时无法登陆的, 可能有点麻烦 方法2.修改la ...
- [转]深入理解ajax系列——进度事件
一般地,使用readystatechange事件探测HTTP请求的完成.XHR2规范草案定义了进度事件Progress Events规范,XMLHttpRequest对象在请求的不同阶段触发不同类型的 ...
- Mac安装软件新方法:Homebrew-cask
Homebrew是Ruby社区极富想象力的一个作品,使得Mac下安装Mysql等常用包不再困难.那么,是否也可以通过brew install mysql这样简单的方式来安装chrome浏览器? 近期, ...