我创建了一个使用PHP写入文本文件的聊天室,然后将文本文件读取给用户。我被告知很多次,如果多个用户同时写入我服务器上的同一文件,该文件可能已损坏。
这是如何引起的?这是怎么发生的?
答案 0 :(得分:1)
这不是连接到PHP,而是连接到驱动器上文件的存储方式以及操作系统如何读取和写入文件。
硬盘驱动程序具有一些优化自身性能的智能。但最终,它们只是愚蠢的机器。
如果进程(或两个或更多)要求操作系统将大量数据(用户A的大帖子)写入文件,则驱动程序可能希望将此数据分解为多个块(匹配设备的块大小)以优化硬盘性能。写一个块需要时间。即使它只是一秒的一小部分,它仍然是一个持续时间,其中可能会出现另一个进程并要求操作系统将其他内容(来自用户B的简短问候语)写入同一文件描述符。操作系统不够智能,无法理解您的应用程序的意图,它只是遵循它发布的指令。并写入用户B的数据。然后它继续写下一个用户A的数据块。这导致以下数据存储在文件中:
用户A的帖子用户A的帖子用户A的帖子用户A的帖子用户B'快速用户A的帖子用户A的帖子用户A的帖子
这看起来可能看起来很无害,但是如果你放入多字节字符编码怎么办呢?用户A的块的结尾可能位于角色的中间,这将使其难以辨认并且几乎无法恢复。