Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 多个用户写入一个文件如何导致损坏?_Php_File_Corruption - Fatal编程技术网

Php 多个用户写入一个文件如何导致损坏?

Php 多个用户写入一个文件如何导致损坏?,php,file,corruption,Php,File,Corruption,我制作了一个聊天室,它使用PHP写入文本文件,然后将文本文件读取给用户。我被告知很多次,如果多个用户同时写入我服务器上的同一个文件,该文件可能会损坏 这是如何造成的,又是如何发生的?这与PHP无关,而是与文件如何存储在驱动器上以及操作系统如何读取和写入文件有关 硬盘驱动程序具有一些优化自身性能的智能。但最终,它们只是愚蠢的机器 如果一个进程(或两个或多个进程)要求操作系统将大量数据(来自用户a的一篇大文章)写入文件,则驱动程序可能希望将这些数据分解为几个块(与设备的块大小相匹配),以优化HDD性

我制作了一个聊天室,它使用PHP写入文本文件,然后将文本文件读取给用户。我被告知很多次,如果多个用户同时写入我服务器上的同一个文件,该文件可能会损坏


这是如何造成的,又是如何发生的?

这与PHP无关,而是与文件如何存储在驱动器上以及操作系统如何读取和写入文件有关

硬盘驱动程序具有一些优化自身性能的智能。但最终,它们只是愚蠢的机器

如果一个进程(或两个或多个进程)要求操作系统将大量数据(来自用户a的一篇大文章)写入文件,则驱动程序可能希望将这些数据分解为几个块(与设备的块大小相匹配),以优化HDD性能。编写块需要时间。即使只是一小部分秒,它仍然是一个持续时间,在此期间,可能会出现另一个进程,并要求操作系统向同一文件描述符写入其他内容(来自用户B的简短问候语)。操作系统不够智能,无法理解应用程序的意图,它只是按照它发出的指令操作。并写入用户B的数据。然后继续写入用户A的下一个数据块。这将导致以下数据存储在文件中:

用户A的帖子用户A的帖子用户A的帖子用户A的帖子用户B的快速用户A的帖子用户A的帖子用户A的帖子用户A的帖子用户A的帖子


乍一看,这可能是无害的,但如果您使用多字节字符编码,会怎么样呢?用户A的块的结尾可能出现在字符的中间,这会使字符难以辨认,几乎无法恢复。

你好。我建议你看看。我读了这一页,不明白我的问题出了什么问题。