PHP文件写入线程问题

| 在PHP网页中,我以写入模式打开文件,读取并删除第一行并关闭文件。 (文件有1000行) 现在的问题是,如果有大约100个用户连接到该页面,那么所有人都将以写模式打开该文件,然后在删除第一行后尝试写该文件。 在这种情况下会不会出现僵局? 供您参考,我们将Windows服务器与IIS服务器和PHP5一起使用。 在此先感谢您的帮助。     
已邀请:
使用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被释放 请注意,第二个实例等待第一个实例释放文件锁定。 如果它不符合您的要求,那么...尝试发明其他解决方案,例如: 用户可以读取文件,然后编辑一行并将其保存为临时文件,其他用户保存其临时文件,依此类推,一旦所有用户释放了文件锁,您就可以将所有新临时文件组成一个新文件,彼此互为补丁(使用保存文件mtime来定义哪个文件应该分层另一个文件)...类似这样的东西...也许...不幸的是,我不是这种任务的专家,只是我对如何获得此文件的假设完成。     
使用文件锁定或允许并发访问的数据库。否则,您会遇到麻烦。     

要回复问题请先登录注册