0

我有一个网站,人们在其中提交内容,然后将其插入集体图像中。我的代码有效,但到目前为止我发现了一个问题:

如果两个人同时写(比方说,同时提交),这会导致输出文件变成0KB,换句话说,它只是一个空文件。

我正在使用输出缓冲区、GD2 和 file_put_contents 编写,如下所示:

ob_start();
imagejpeg($map);
file_put_contents(MAP, ob_get_contents(), FILE_BINARY);
ob_end_clean();

我想知道解决这个问题的最佳方法是什么?

谢谢!

4

2 回答 2

2

file_put_contents(MAP, ob_get_contents(), LOCK_EX)

于 2011-05-24T22:15:27.500 回答
1

我之前尝试过的 PHP 中记录的锁定机制似乎并不能可靠地防止我的系统发生冲突。即使对于一个简单的网站计数器,在经过其他一些尝试后,我最终还是使用了一个带有实际文件名中计数器值的空文件,因为文件重命名至少是一个原子操作。

这些问题可能取决于操作系统和文件系统,甚至可能在这些天得到修复,但如果您确实遇到这样的问题,您可以尝试通过在修改文件之前将文件重命名为其他内容,然后重命名来实现自己的锁定方式完成后它会回来。

或者,您可以考虑将图像存储在数据库中。

于 2011-05-24T22:27:25.043 回答