索引

Linux文
件





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


注:没有inode数据时,是不能创建文件成功的,所以上图中,最多只能创建14个文件;
ext3文件系统
ext3是很多Linux发行版的默认文件系统;



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




注:1exbibytes = 1024Pb; 1Pb = 1024Tb; 1Tb = 1024 Gb;
文本文件和二进制文件

注:字符编码如gbk,utf8;
文件的打开方式

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





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





pack写入二进制文件示例
<?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);以16进制打开上面的代码后,结果为:

注:第一行20前面的7个字节对应字符串'pikaqiu',13个20对应变量$name里用于填充的13个空格;FF 00对应$age变量,短整形的255,最后一截对应变量$email的字符串'pikaqiu@admin.com',最后三个00是用于填充的NUL,有NUL值也是二进制文件一个特征,文本文件里不会产生NUL值,00对应的NUL为不可见字符;
unpack解析二进制文件示例
<?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
)png图片判断


注:png文件可以通过前面
这个特征来判断,但也不能说有这个特征就绝对是png格式的文件,且此种方法只针对png,其它的图片文件则不适用;其它类型的文件判断,则需要该类型文件的特征码;
php有系统函数可以用来判断图片的格式:exif_imagetype;
文件指针定位
通过文件指针,可以迅速将大文件中某些数据块读取到内存中,如视频播放中的断点定位;




php中XML处理方式比较

php中json的处理
json的格式为:
;



csv文件处理

fope详解

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

php大文件上传



php大文件上传XMLHttpRequest示例:
注:这种切片上传的方式,需要配置php.ini里的两个配置:
1)post_max_size=1024M//POST文件的大小
2)max_file_uploads=10000 //能上传的文件数
<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><?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'