gpt4 book ai didi

PHP文件写入线程问题

转载 作者:可可西里 更新时间:2023-11-01 00:16:59 25 4
gpt4 key购买 nike

在 PHP 网页中,我以写入模式打开文件,读取并删除第一行并关闭文件。 (该文件有 1000 行)

现在,问题是,如果有大约 100 个用户连接到该页面,所有用户都将以写入模式打开该文件,而不是在删除第一行后尝试写入它。这种情况会不会出现死锁?

供您引用,我们正在使用带有 IIS 服务器和 PHP5 的 Windows 服务器。
预先感谢您的帮助。

最佳答案

使用flock一次只授予一个用户访问文件的权限。

但不要忘记通过 fclose 释放您的文件锁

更新。考虑这段代码:

<?php
$start = time();
echo 'Started at '.$start.'<br />';
$filename = 'D:\Kindle\books\Brenson_Teryaya_nevinnost__Avtobiografiya_66542.mobi';
$fp = fopen($filename, 'w+') or die('have no access to '.$filename);

if (flock($fp, LOCK_EX)) {
echo 'File was locked at '.time().'. Granted exclusive access to write<br />';
}
else {
echo 'File is locked by other user<br />';
}
sleep(3);
flock($fp, LOCK_UN);
echo 'File lock was released at '.time().'<br />';
fclose($fp);
$end = time();
echo 'Finished at '.$end.'<br />';
echo 'Proccessing time '.($end - $start).'<br />';

运行此代码两次(它锁定文件 3 秒,因此让我们将手动脚本视为异步运行)。你会看到这样的东西:

一审:

  • 文件被锁定在 1302788738。授予独占写入权限
  • 文件锁定已在 1302788741 解除

第二个:

  • 文件被锁定在 1302788741。授予独占写入权限
  • 文件锁已于 1302788744 解除

注意,第二个实例等待第一个释放文件锁。

如果它不符合您的要求,那么......尝试发明其他解决方案,例如:用户可以读取文件,然后他编辑一行并将其保存为临时文件,其他用户保存他的临时文件等等,一旦你让所有用户释放文件锁定,你就可以将新文件作为所有临时文件的补丁相互组合(使用及时保存文件以定义哪个文件应该将另一个文件分层)...类似这样的...也许...不幸的是,我不是这类任务的专家-只是我对如何完成此任务的假设.

关于PHP文件写入线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5663229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com