3

文件操作

PHP中的文件操作和目录操作

file_get_countents

file_get_contents($filename); // 获取一个文件的内容或一个网络资源的内容.
读取文件网络资源比较快捷的函数,帮助封装了打开/关闭等操作。

缺点:该函数是一次性把内容全部读出来,放在内存中.因此,如果处理上百兆的大文件,慎用此函数。
读取的文件必须要求存在,否则会警告

<?php
    $fileFile = './a.txt';
    
    $fileCoutent = file_get_contents($fileFile);

    echo $fileCoutent;
    
    echo file_get_contents('http://www.linxingzhang.com');    

?>

file_put_counents

file_put_contents($filename, $data);
该函数用来把内容写入到文件,快捷函数,帮助封装打开写入的细节

<?php

file_put_contents('./b.txt', '嘻嘻哈哈');

?>

判断数据类型

isset(); 变量是否已经声明
empty(); 变量是否为空
defined(); 常量是否已经定义 define();
array_key_exists(mixed key, array serach); 检查给定的键名或索引是否存在于数组中


is_numeric(mixed var); 检测给定的键名或索引是否存在于数组中
is_bool(); 检测变量是否是布尔型
is_float(); 检测变量是否是浮点型 和 is_double(), is_real() 都一样的用法
is_int(); 检测变量是否是整型is_integer() 一样的用法
is_string(); 检测变量是否是字符串
is_object(); 检测变量是否是一个对象
is_array(); 检测变量是否是数组
is_null(); 检测变量是否为NULL

fopen&fread&fwrite&fclose

fopen($filename, $mode)
参数1:路径
参数2:模式 如:只读模式,如:读写模式,如:追加模式
打开一个文件,返回一个句柄资源

返回值:资源。(通道的作用,沿着通道就能够操作文件。获取了修改这个文件的资格)

fread($handle, $length)
参数1: 资源标识
参数2:读取的长度
返回值:所读取的字符串
读取文件

fwrite($handle, $string);
参数1:资源标识
参数2:内容
返回值:成功字符串数,失败返回false
写入文件

fclose($handle);
关闭资源

<?php
    $file = './a.txt';
    
    // 返回获取资格的标识
    $fh = fopen($file, 'r');
    
    // 沿着上面返回的$fn资源通道来读文件
    echo fread($fh, 10);
    
    $rs = fwrite($fh, 'xixihaha');
    echo $rs; // 0 // 只读,不允许写入
    
    fclose($fh);
?>

<?php

    $file = './a.txt';
    
    // r+ 读写模式, 并把指针指向文件头
    // 覆盖相等字节的字符串
    $fh = fopen($file, 'r+');
    
    $rs = fwrite($fh, 'hahahaha');
    echo $rs; 
    
    echo '<hr />';
    
    // w 写入模式(fread读取不了), 并把文件大小截为0(文件被清空了),指针停于开头处
    $file = './modew.txt';
    $fh = fopen($file, 'w');
    
    fclose($fh);
    echo 'ok';


    // a 追加模式 能写,并把指针停止在文件的最后.
    $fh = fopen('./modea.txt', 'a');
    
    echo fwrite($fh, '嘻嘻哈哈');
    
    fclose($fh);

    ?>

file

批处理名单

第一种办法:

<?php
    
    $file = './custom.txt';
    
    $cont = file_get_contents($file);
    
    print_r( explode("\n", $cont) ); 
    
    /**
     * 各个操作系统下,换行符并不一致
     * win: \r\n
     * *nix: \n
     * mac: \r
     */
?>    

第二种办法:

<?php

    // 第二种
    // 打开,一点点的读取,每次读取一行.
    // fgets(); 每次读取一行
    
    $file = './custom.txt';
    // $mode 可以加`b`,表示以2进制来处理,不受编码的干扰. 
    $fh = fopen($file, 'rb');
    
    // feof(), end of file 的意思
    // 判断指针是否已经到结尾
    
    while ( !feof($fh) ) {
        echo fgets($fh) , '<br />';
    }
?>

第三种办法:

file(); 直接读取文件内容,并按行拆成数组,返回该数组.

和 file_get_contents(); 的相同之处:
一次性读入,大文件慎用.

<?php

    // file(); 
    $file = './custom.txt';
    $arr = file($file);
    print_r($arr);

?>

file_exists

file_exists 检查文件或目录是否存在
file_exists($filename);

<?php
    // 判断文件是否存在
    // 获取文件的创建时间/修改时间
    
    $file = './custom.txt';
    
    if ( file_exists($file) ) {
        echo $file, '存在', '<br />';
        echo '上次修改时间:', date('Y-m-d H:i:s', filemtime($file)), '<br />';
        echo '修改时间:', date('Y-m-d H:i:s', filectime($file)), '<br />';
    }

?>

excel文件导入到数据库

操作excel,有开源的phpExcel开源类.

  1. excel并不是开放的标准,是微软自己的标准(有可能会变)

  2. 如果是简单的想导入数据库,可以先转换csv文件
    csv是一种简单的用逗号隔开的文件格式.

方法: excel -> csv -> 文本处理

<?php
    $file = './score.csv';

    $fh = fopen($file, 'rb');    
    
    // 思路1: fgets(); 每次读取一行, 用逗号拆成数组
    
    while ( !feof($fh) ) {
        $row = fgets($fh);
        print_r( explode(',', $row) );                
    }
    ?>

<?php
// 思路2: fgetcsv(); // 封装了csv文件相关规范

    $file = './score.csv';
    $fh = fopen($file);

    while ( !feof($fh) ) {
        $row = fgetcsv($fh);
        print_r($row);
    }

?>

批量处理文件内容

<?php

    // 批量处理文件内容
    
    /**
     * 思路:
     * 循环文件名
     * 判断大小  filesize()  < 10字节删除 
     * 判断是否有 fuck 单词. 如果有使用 unlink() 删除.
     */
     
    foreach ( array('a.txt', 'b.txt') as $val ) {
        
        $file = './' . $val;
        
        // 判断大小
        if ( filesize($file) < 10 ) {
            unlink($file);
            echo $file . '小于 10 字节';
            continue;
        }
        
        // 判断内容
        $cont = file_get_contents($file);
        if ( stripos($cont, 'fuck') !== false ) {
            unlink($_file);
            echo $file . '文明用语';
        }        
        
    } 

?>

目录操作

glob(); // 匹配目录下的指定后缀文件.
返回一个获取文件的数组


<?php
    // 匹配文件 glob();
    var_dump(glob('*.php'));
?>

opendir 打开目录
readdir 读取目录
closedir 关闭目录句柄
is_dir 判断是否为目录
mkdir 创建目录
rmdir 删除目录


<?php

    // .
    // .. 是虚拟目录,分别代表 当前目录 和 上一级目录
            
    while ( ($filename = readdir($dh)) !== false ) {
        echo $filename; 
        if ( is_dir('./' . $filename) ) {
            echo '是目录';
        }
        echo '<br/>';
    }        

?>

创建目录

<?php
    // 创建目录
    foreach ( array('a', 'b', 'c') as $v  ) {
        $path = $v;
        if ( mkdir($path) ) {
            echo $path . '创建成功';
        } else {
            echo $path . '创建失败';
        }
    }
    // 如果创建成功,第二次执行就创建失败.
?>

<?php
    foreach ( array('a', 'b', 'c') as $v  ) {
        
        $path = $v;
        
        if ( file_exists($path) && is_dir($path) ) { // 增加判断条件:是文件或者是目录, 并且存在当前文件.
            echo $path . '该目录已经存在<br/>';
            continue;
        }
        
        if ( mkdir($path) ) {
            echo $path . '创建成功<br/>';
        } else {
            echo $path . '创建失败';
        }
        
    }
?>

删除目录

<?php

    // rmdir(); 只能删除非空目录.
    // 如果一个目录非空,该如何删除?
    // 使用递归,判断是否为空,一层层删除。
    foreach( array('a', 'c', 'e') as $v ) {
        
        $path = $v;
        
        if ( file_exists($path) && is_dir($path) ) {
            
            if ( rmdir($path) ) {
                echo $path . '删除成功';
            } else {
                echo $path . '删除失败';
            }
            
        } else {
            echo $path . '文件不存在';
        }
        
    };

?>    

alogy
1.3k 声望121 粉丝

// Designer and Developer


« 上一篇
Vue_VueResource
下一篇 »
PHP_GD库