[笔记]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('/<imgs*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> -->









原文地址:https://www.cnblogs.com/lizunicon/p/4120821.html