上一次修改时间:2018-06-07 01:31:21

文件核心编程

  1. 索引

    image.png

  2. Linux文

    image.png

    image.png

    image.png

    image.png

    image.png

    注:/dev/zero可用于创建虚拟硬盘时,用0去填充整个磁盘空间; 文件的inode用于记录文件基本信息;

    inode数据包含的内容:

    image.png

    image.png

    image.png  

    注:没有inode数据时,是不能创建文件成功的,所以上图中,最多只能创建14个文件; 

  3. ext3文件系统

    ext3是很多Linux发行版的默认文件系统;

    image.png

    image.png

    image.png

  4. XFS文件系统

    XFS文件系统于2000年5月后移植到了Linux 内核上,XFS 特别擅长处理大文件,同时提供平滑的数据传输。

    image.png

    image.png

    image.png

    image.png

    注:1exbibytes = 1024Pb; 1Pb = 1024Tb; 1Tb = 1024 Gb; 

  5. 文本文件和二进制文件

    image.png

    注:字符编码如gbk,utf8;

  6. 文件的打开方式

    image.png

    注:文件指针操作的最小单位是字节;

    image.png

    image.png

    image.png

    image.png

    image.png

    注:word文件其实是一个压缩文件,可以将word文件重命名,并将后缀名改为zip,就可以解压出其原始文件;同理,微信电脑版及qq.exe也是压缩文件,都可以直接用压缩软件直接打开; 

  7. php文件函数 

    image.png

    image.png 

    image.png

    image.png

    image.png

    image.png

    image.png 

  8. pack写入二进制文件示例

  9. <?php
    $fh = fopen('my.db' , 'wb');//php4.3以后打开文件的方式默认为二进制打开,因此,读写方式'wb'里,b是可以省略的
    $name = pack('A20' , 'pikaqiu');//将字符串以空格填满,占的空间总长为20
    $age = pack('S' , 255);//短整形,占两个字节
    $email = pack('a20' , 'pikaqiu@admin.com');//将字符串以NUL填满,占的空间总长为20
    fwrite($fh , $name . $age . $email);//文件总长为42个字节
    
    //pack的格式化写法
    //$data = pack('A20Sa20' , 'pikaqiu' , '255' , 'pikaqiu@admin.com');
    //fwrite($fh , $data);
  10. 以16进制打开上面的代码后,结果为:

    image.png

    注:第一行20前面的7个字节对应字符串'pikaqiu',13个20对应变量$name里用于填充的13个空格;FF 00对应$age变量,短整形的255,最后一截对应变量$email的字符串'pikaqiu@admin.com',最后三个00是用于填充的NUL,有NUL值也是二进制文件一个特征,文本文件里不会产生NUL值,00对应的NUL为不可见字符

  11. unpack解析二进制文件示例

  12. <?php
    $data = file_get_contents('my.db');//小文件读取可以用file_get_contents函数
    $items = unpack('A20name/Sage/a20email' , $data);//二进制文件如果不知道存储格式('A20name/Sage/a20email')的情况下,很难解析其内容
    print_r($items)
    
    --------------------------------------------------------------------
    //打印的结果为:
    Array
    (
        [name] => pikaqiu
        [age] => 255
        [email] => pikaqiu@admin.com
    )
  13. png图片判断

    image.png

    image.png

    注:png文件可以通过前面image.png这个特征来判断,但也不能说有这个特征就绝对是png格式的文件,且此种方法只针对png,其它的图片文件则不适用;其它类型的文件判断,则需要该类型文件的特征码;

    php有系统函数可以用来判断图片的格式:exif_imagetype;

  14. 文件指针定位

    通过文件指针,可以迅速将大文件中某些数据块读取到内存中,如视频播放中的断点定位;

    image.png

    image.png

    image.png

    image.png

  15. php中XML处理方式比较

    image.png

  16. php中json的处理

    json的格式为:image.png

    image.png

    image.png

    image.png

  17. csv文件处理

    image.png

  18. fope详解

    image.png

    php手册中支持的协议和封装,这里标识的协议都可以通过fopen打开;

    image.png

  19. php大文件上传

    image.png

    image.png

    image.png

  20. php大文件上传XMLHttpRequest示例:

    注:这种切片上传的方式,需要配置php.ini里的两个配置:

    1)post_max_size=1024M//POST文件的大小

    2)max_file_uploads=10000 //能上传的文件数

  21. <html>
    <head>
    </head>
    <body>
    o<form>
    o<input type="file" id="file">
    o</form>
    o<div>文件总大小(单位:字节):<span id="fileTotal"></span></div>
    o<div>已上传的大小(单位:字节):<span id="fileFinish"></span></div>
    o<div>已上传的大小的百分比:<span id="fileFinishPercentage"></span></div>
    o<div>未上传的大小(单位:字节):<span id="fileUnfinished"></span></div>
    <script src="jquery-1.11.2.min.js"></script>
    <script>
    o//每次上传文件块的长度,单位:字节
    ovar preUploadSize = 1024 * 1024;
    
    ovar xhr = new XMLHttpRequest()
    o//文件块的开始位置
    ovar start = 0;
    
    o$('#file').change(function(){
    ovar files = this.files;
    o//上传第一个文件
    ovar file = files[0];
    ovar fileSize = file.size;
    o$("#fileTotal").html(fileSize);
    oconsole.dir(file);
    
    ovar data = new FormData();
    o//上传第一个文件块
    obolkSend(0);
    
    ovar t = setInterval(function(){
    o//设置定时器,每隔1秒去检测一次上一数据块是否上传成功,上传成功时,xhr.responseText里会有上传成功后,php输出的返回值
    oif('fail' == xhr.responseText){
    o//上传失败
    o$("#fileUnfinished").html('上传失败');
    oclearInterval(t);
    o}
    
    oif(("" != xhr.responseText && preUploadSize != xhr.responseText) || (start + preUploadSize == fileSize)){
    o//最后一个数据块上传成功,清除定时器
    o$("#fileFinish").html(fileSize);
    o$("#fileFinishPercentage").html('100%');
    o$("#fileUnfinished").html(0);
    oclearInterval(t);
    o}
    oif(preUploadSize == xhr.responseText){
    o//文件块上传成功
    ostart += preUploadSize;
    o$("#fileFinish").html(start);
    o$("#fileFinishPercentage").html(((start / fileSize).toFixed(2)) * 100 + '%');
    o$("#fileUnfinished").html(fileSize - start);
    o//上传下一次数据块
    obolkSend(start);
    o}
    o},1000);
    
    ofunction bolkSend(start){
    odata.append("name" , encodeURIComponent(file.name));
    odata.append("file" , file.slice(start , start + preUploadSize));
    o
    oxhr.open("post" , 'upload.php');
    oxhr.send(data);
    o}
    
    o});
    </script>
    </body>
    </html>
  22. <?php
    set_time_limit(0);
    $filename = $_POST['name'];
    $res = file_put_contents('uploads/' . $filename , file_get_contents($_FILES["file"]["tmp_name"]) , FILE_APPEND);
    
    if($res)
    o//有返回的字节数,追加写入成功
    oecho $res;
    else
    o//文件写入失败
    oecho 'fail'