[笔记]PHP文件系统处理
PHP文件系统处理
***所有的文件处理都是使用系统函数完成的.
***php文件处理 是 基于linux/unix系统为模型的, 在linux下完全没问题
在windows下有一些 有差别.
#### 文件读写操作,与C语言等 处理方式相同.
文件处理的作用:
1.所有的项目,都离不开文件处理.
2.把数据长时间保持,需要文件
3.建立网站缓存 / 服务器中的文件操作
文件处理:
1.用系统的函数获取 文件的类型, 等等
#### 文件的 类型
#### 文件系统类型
以linux/unix委模型的,
在windows中只能获取file,dir或unknown类型(三种)
在linux下 block,char, dir, fifo, file, link, unknown(七种)
block : 块设备文件, 某个磁盘分区, 软驱,光驱,等
char : 字符设备, 输出过程I/O中以字符为单位传输的设备,键盘,打印机等
*dir : 目录也是文件的一种, linux中通常文件,类型不同,
*fifo: 命令管道,信息从一个进程传入另一个进程
file:
link: 链接文件, (快捷方式) ln -s
filetype("目录或文件名")
is_file -- 判断给定文件名是否为一个正常的文件
is_dir -- 判断给定文件名是否是一个目录
is_executable -- 判断给定文件名是否可执行
is_link -- 判断给定文件名是否为一个符号连接
is_readable -- 判断给定文件名是否可读
is_uploaded_file -- 判断文件是否是通过 HTTP POST 上传的
is_writable -- 判断给定的文件名是否可写
is_writeable -- is_writable() 的别名
2.文件的属性 获取
file_exists -- 检查文件或目录是否存在
filesize -- 取得文件大小
is_readable -- 判断给定文件名是否可读
is_writable -- 判断给定的文件名是否可写
fileatime -- 取得文件的上次访问时间
filemtime -- 取得文件修改时间
filectime -- 取得文件的 inode 修改时间
fileactime() -- 访问.修改时间
state -- 查看文件状态
3.获取文件位置*(目录相关的函数)
4.文件操作 ( 创建 删除 移动)
5.文件的打开 关闭 (读文件内容, 向文件写内容)
6.文件内部 移动指针(读取文件中指定位置的数据, 只读取中间几个字符...)
7. 文件锁定机制
能用鼠标完成的,都能用程序完成(**操作对象在远程主机上*)
目录处理
1.目录的遍历
2.目录的创建 删除
3.目录的复制
对文件来说有系统函数, ***目录没有
5.统计目录大小
文件上传和下载
1.上传
2.下载
/*
和文件路径相关的函数::
相对路径
是以当前目录为准的(相对于当前目录的 上级和下级目录)
. 代表当前目录
.. 代表上一级目录
./php/apache/index.php
php/apache/index.php
login.php
./login.php
../images/tpl/logo.gif
****** 路径分隔符号: *****
linux/unix /
windows \
** (php手册)常量 DIRECTORY_SEPARATOR (string) - 为不同平台,提供目录分隔符
windows \
linux /
<b>不管是什么操作系统, php的目录分隔符号 都支持 / (正斜杠)</b>
在php和apache配置文件中, 如果需要指定目录, 也使用 / 作为目录分隔符
***************************
绝对路径
是从根开始的
/ - 根路径
/images/index.php -
? 指的是 操作系统的根
? 还是 存放网站的文档根目录
** 分情况 **
如果是在服务器中执行(通过php文件处理函数执行)路径, 根指的就是os的根.
如果程序(html,css,js)是下载到客户端, 在访问服务器中的文件时,只有通过apache访问,根 也就指的是文档根目录.
basename(url) - 获取文件名
dirname(url) - 获取目录
pathinfo() - 路径信息
*/
/*
* 文件的操作
创建文件
touch
删除 文件
unlink
移动 文件(也用于重命名)
rename(当前文件路径, 目标文件路径)
复制 文件
copy(当前, 目标)
重命名 文件
rename()
所有 对文件的操作 一定要有PHP执行这个文件的权限, apache, 启动apache的用户 具有权限.
(windows - 比较危险, 一般apache都是管理员运行
linux - 一般文件/目录 只读, 少数可读写)
chgrp -- 改变文件所属的组
chmod -- 改变文件模式
chown -- 改变文件的所有者
ls -s / ll
_rwxrwxrwx => 777
_ 类型 _文件 d - 目录 l-link b-clock
1.rwx - 这个文件拥有者具有读写执行权限
2.rwx - 拥有者所在的组
3.rwx - 其他用户对这个文件的权限
r 4
w 2
x 1
7 7 7 => 4+2+1 4+2+1 4+2+1
6 4 4
7 5 5
chmod 777 demo.php - 可读可写可执行
chmod u=rwx, g=rwx, o=r
chmod 644 demo.html - 可读写只读只读
chown MySQL "demo.php"
chgrp apache "demo.php"
filegroup -- 取得文件的组
fileowner -- 取得文件的所有者
****
本节主要介绍
PHP文件的常规 读和写 的操作
详细介绍了
file_get_contents()
file_put_contents()
以及
file()
readfile()
的应用
通过改写配置文件和提取sql语句的示例 演示几个读取文件的操作.
****文件读写
读取文件
file_get_contents()_php5+_简单读写推荐
file()
readfile()
******以上都是全部读取*****不足: 不能读取部分,也不能指定的区域*****
fopen()-打开文件
fread()-读取多少个字符
fgetc()-读单个字符
fgets()-读单行字符
写入文件
file_put_contents()_php5+_简单读写推荐 (
如果文件不存在,创建并写入;
如果文件存在, 删除原内容,写入新的)
(以上是覆盖模式的写法)
// 不足: 不能用追加的方式写; 也不能加锁.
fopen()
fwrite() - fputs()
本地文件: 可以使用 相对路径和绝对路径
./test.txt
远程文件:
http://www.baidu.com
http://www.163.com
(远程文件一般没有写权限)
fclose -- 关闭一个已打开的文件指针
****
****
****
*/
// echo file_put_contents("./abc.txt",'asddfa');
/*$str=file_get_contents('./abc.txt');
echo $str;
*/
// echo file_put_contents("test1.txt", "www.lampbrother.net");//返回写入的字符数
/*读取网站网页内容 _ 分析出 网页中的图像标记 */
/*$str=file_get_contents("http://www.zol.com.cn");
// echo $str;
preg_match_all('/\<img\s*src=.*?\s*\/?\>/i', $str,$images);
echo "<pre>";
print_r($images);
echo "</pre>";
*/
// 演示- 示例
//表单提交 - 演示用提交内容改写配置文件
// if(isset($_POST["sub"])){
/* echo "<pre>";
print_r($_POST);
echo "</pre>";*/
// setConfig($_POST);
// }
// 单开一个函数,把修改写入配置文件
/*function setConfig($post){ // 三步
$configFile="config.inc.php";
// 读出配置文件内容
$str=file_get_contents($configFile);
// 修改内容
$pattern=array();
$rep=array();
foreach ($post as $key => $value) {
$pattern[]="/define\(\"{$key}\"\s*.*?\);/i";
$rep[]="define(\"{$key}\",\"{$value}\");";
}
*/
/*
echo "<pre>";
print_r($pattern);
print_r($rep);*/
/*
$str=preg_replace($pattern, $rep, $str);
// 写入配置文件
file_put_contents($configFile, $str);
}
*/
// 演示readfile()
// readfile("abc.txt");// 读出 并 直接输出/**/
//直接输出不能自己处理啦
/*readfile(){
echo $string;
}
// 上面的一条语句相当于下面
file_get_contents("abc.txt"){
return $string;
}*/
/*
$arr=file("abc.txt");// 一行是数组中一个元素,
// 数组尺寸是文件
echo "<pre>";
print_r($arr);
*/
/*
// file()- 经常用
读出来 是一个数组,
[案例]把sql文件中的sql语句都提取出来,
注释/空行 都过滤
*/
// 读取 所有行
$lines=file("imooc.sql");
$sqlstr="";//合并到sql字符串
foreach ($lines as $line) {
$line=trim($line);// 去掉两端的空格
// 过滤空行
if ($line!="") {
if (!($line{0}=="#" || $line{0}.$line{1}=="--")) {
$sqlstr.=$line;
}
}
}
// 分割(按分号;)
$asql_arr=explode(";", $sqlstr);
// echo $sqlstr;
echo "<pre>";
print_r($asql_arr); // 一共175行
<!-- 表单界面 -->
<!-- <form action="file_rw.php" method="post">
host: <input type="text" name="DB_HOST"><br>
user: <input type="text" name="DB_USER"><br>
pass: <input type="text" name="DB_PWD"><br>
dbname: <input type="text" name="DB_NAME"><br>
tabPREFIX: <input type="text" name="DB_PREFIX"><br>
<input type="submit" name="sub" value="mod"><br>
</form> -->