图像文件写入:一种锁定文件的安全方法

问题描述

| 我有一个网站,人们在那里提交内容,然后将其插入到集体图像中。我的代码有效,但是到目前为止我发现了一个问题: 如果有两个人试图同时写(例如,都同时提交),这将导致输出文件变为0KB,换句话说,它只是一个文件。 我正在使用输出缓冲区GD2和file_put_contents进行写入,如下所示:
ob_start();
imagejpeg($map);
file_put_contents(MAP,ob_get_contents(),FILE_BINARY);
ob_end_clean();
我想知道的是解决此问题的最佳方法是什么? 谢谢!     

解决方法

file_put_contents(MAP,ob_get_contents(),LOCK_EX)
    ,我曾经尝试过的PHP中记录的锁定机制似乎无法可靠地防止系统冲突。即使对于一个简单的网站计数器,在进行了一些其他尝试之后,我最终还是使用了一个空文件,其计数器值位于实际文件名中,因为文件重命名至少是一项原子操作。 这些问题可能取决于操作系统和文件系统,并且甚至可能在今天得到解决,但是如果您确实遇到此类问题,则可以尝试通过在修改文件之前将文件重命名为其他名称来实现自己的锁定方式,然后再重命名完成后将其恢复。 或者,您可以考虑将图像存储在数据库中。