【问题标题】:How can multiple users writing to a file cause corruption?多个用户写入文件如何导致损坏?
【发布时间】:2018-01-24 21:38:38
【问题描述】:

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

这是如何引起的,又是如何发生的?

【问题讨论】:

标签: php file corruption


【解决方案1】:

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

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

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

用户 A 的帖子 用户 A 的帖子 用户 A 的帖子 用户 A 的帖子 用户 B 的 QUICKY 用户 A 的帖子 用户 A 的帖子 用户 A 的帖子

乍一看这可能没有什么害处,但是如果您使用多字节字符编码会怎样呢?用户 A 的块的结尾可能位于字符的中间,这将使其难以辨认且几乎无法恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    • 2018-01-02
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多