一.目录操作

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核心编程--目录操作(包含文件操作)的更多相关文章

  1. paip.c++ qt 目录遍历以及文件操作

    paip.c++ qt 目录遍历以及文件操作 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.net/a ...

  2. 积累的VC编程小技巧之文件操作

    1.删除文件夹 // 删除文件夹及其所有内容void CBaseDoc::RemoveFolder(const CString &strPathName){    CString path = ...

  3. C# 目录下的文件操作

    运用DirectoryInfo类的对象我们可以轻松的实现对目录以及和目录中的文件相关的操作,假如你要获得某个目录F:\Pictures下的所有BMP文件,那么通过下面的代码就可以实现该功能. 上面的代 ...

  4. python基础编程: 编码补充、文件操作、集合、函数参数、函数递归、二分查找、匿名函数与高阶函数

    目录: 编码的补充 文件操作 集合 函数的参数 函数的递归 匿名函数与高阶函数 二分查找示例 一.编码的补充: 在python程序中,首行一般为:#-*- coding:utf-8 -*-,就是告诉p ...

  5. python-网络安全编程第二天(文件操作)

    前言 才吃完火锅嘿嘿,吃完把今天所学的内容写个博客当做笔记用哈哈! 文件操作 f=open("test.txt",w)直接打开一个文件,如果文件不存在则创建文件open模式w:以写 ...

  6. Linux - 目录结构及文件操作

    根目录 “/”:Linux 系统中最高层的目录 这个就是根目录 用 / 表示根目录 bin 目录:存放可执行文件 bin 目录下的文件都是平常使用的命令 在 Linux 系统中,一切都是文件 sbin ...

  7. Linux目录结构及文件操作

    Linux文件目录遵循FHS标准 绝对路径:从根目录开始的路径:相对目录:从当前路径开始的路径 .表示当前目录,..表示上级目录,~表示当前用户的home目录,pwd获得当前绝对路径 新建文件 tou ...

  8. day4-基础 字符串操作,文件操作,字符转编码

    1.字符串用法 name = 'daniel' print(name.capitalize()) #首字母大写 >>>daniel print(name.count('a')) #统 ...

  9. Go基础--终端操作和文件操作

    终端操作 操作终端相关的文件句柄常量os.Stdin:标准输入os.Stdout:标准输出os.Stderr:标准错误输出 关于终端操作的代码例子: package main import " ...

随机推荐

  1. mysql导入数据

    1.准备sql文件:第一句话就是指定要操作的数据库,然后是insert语句,或者update语句或者delete语句 2.登录数据库,并执行:    source       sql文件位置 不要直接 ...

  2. [编织消息框架][netty源码分析]11 ByteBuf 实现类UnpooledHeapByteBuf职责与实现

    每种ByteBuf都有相应的分配器ByteBufAllocator,类似工厂模式.我们先学习UnpooledHeapByteBuf与其对应的分配器UnpooledByteBufAllocator 如何 ...

  3. HttpComponents了解

    原文地址:http://blog.csdn.net/jdluojing/article/details/7300428 1 简介 超文本传输协议(http)是目前互联网上极其普遍的传输协议,它为构建功 ...

  4. 使用em为单位制作两列弹性布局

    一.DIV布局按照定位的方法分为:浮动方法(float),坐标定位方法(position),还有就是两者相结合的方法. 二.DIV布局按照定义单位的不同可分为:固定宽度布局.流体布局.弹性布局和混合布 ...

  5. spring-jdbc-aop事务

    1 spring整合JDBC 1.1 概述 spring提供了很多模板整合Dao技术  spring中提供了一个可以操作数据库的对象.对象封装了jdbc技术. JDBCTemplate => J ...

  6. oracle pl/sql远程连接过程

    之前没用过oracle,现在公司用到就记录下安装过程吧.安装PL/SQL工具,安装oracle11G工具.打开PL/SQL 进行配置.

  7. Tarjan求LCA(离线)

    基本思想 把要求的点对保存下来,在dfs时顺带求出来. 方法 将每个已经遍历的点指向它回溯的最高节点(遍历它的子树时指向自己),每遍历到一个点就处理它存在的询问如果另一个点已经遍历,则lca就是另一个 ...

  8. 四种基本组合博弈POJ1067/HDU1846

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 43466   Accepted: 14760 Descripti ...

  9. Leetcode173. Binary Search Tree Iterator二叉搜索树迭代器

    实现一个二叉搜索树迭代器.你将使用二叉搜索树的根节点初始化迭代器. 调用 next() 将返回二叉搜索树中的下一个最小的数. 注意: next() 和hasNext() 操作的时间复杂度是O(1),并 ...

  10. canvas扇形进度圈动态加载

    效果图如下:动态加载的 实现代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta cha ...