我有一个网站,人们提交内容然后插入到集体图像中。我的代码有效,但到目前为止我找到了一个问题:
如果2个人同时尝试写(两个人都说,同时提交),这会导致输出文件变为0KB,另外一个词,它只是一个空文件。
我正在编写输出缓冲区,GD2和file_put_contents,如下所示:
ob_start();
imagejpeg($map);
file_put_contents(MAP, ob_get_contents(), FILE_BINARY);
ob_end_clean();
我想知道解决这个问题的最佳方法是什么?
谢谢!
答案 0 :(得分:2)
file_put_contents(MAP, ob_get_contents(), LOCK_EX)
答案 1 :(得分:1)
我曾经尝试过的PHP中记录的锁定机制似乎并不能可靠地防止我系统上的冲突。即使对于一个简单的网站计数器,我最终在一些其他尝试之后使用实际文件名中的计数器值的空文件,因为文件重命名至少是一个原子操作。
这些问题可能取决于操作系统和文件系统,现在甚至可能会修复,但是如果你确实遇到这样的问题,你可以尝试通过在修改文件之前将文件重命名为其他方式来实现自己的锁定方式,完成后重新命名。
或者,您可以考虑将图像存储在数据库中。