You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在浏览器中同时运行两个PHP脚本并写入同一文件以触发崩溃

嘿,我来帮你搞定这个问题!你想要在浏览器里精确同时跑两个PHP脚本,触发文件写入的冲突甚至崩溃,对吧?咱们一步步来:

实现精确同时运行两个脚本

浏览器手动开标签页点肯定做不到真正同步,这里有两个靠谱的办法:

  • 用JS写个简单的测试页
    写个HTML文件,用异步请求同时触发两个PHP脚本,浏览器会几乎同时发送这两个请求:

    <script>
      // 同时发起两个请求,Promise.all会并行执行它们
      Promise.all([
        fetch('firstFile.php'),
        fetch('secondFile.php')
      ]).then(results => {
        // 把两个脚本的运行时间打印到控制台
        results.forEach((res, index) => {
          res.text().then(time => console.log(`脚本${index+1}运行时间: ${time}`));
        });
      });
    </script>
    

    打开这个HTML页面,就能让两个PHP脚本近乎同时启动。

  • 用命令行批量触发
    如果你能用到终端,直接用curl并行执行:

    curl http://你的域名/firstFile.php & curl http://你的域名/secondFile.php &
    

    加&会让两个命令在后台并行跑,也能实现同步触发。

调整代码触发崩溃/冲突

你现在的代码里用了flock($fh, LOCK_EX),这是排他锁——一个脚本拿到锁后,另一个会乖乖等着锁释放才继续,所以默认情况下不会崩溃,只是第二个脚本会慢一点。要触发问题,得改改代码:

  • 去掉文件锁
    把flock($fh, LOCK_EX);这行删掉,这样两个脚本会同时打开同一个文件写入,轻则数据被覆盖,重则因为文件句柄竞争直接报错。

  • 延长睡眠+去掉锁
    给其中一个脚本加个sleep时间,同时去掉锁:

    // firstFile.php修改这一行
    $rw->write('fileeeeeeee', 'FDSABNIFGA', 5); // 写入后hold住文件句柄5秒
    // secondFile.php保持sleep(0)不变
    

    第一个脚本打开文件后会睡5秒,期间文件句柄没关闭,第二个脚本同时去写同一个文件,很大概率会触发文件资源冲突,导致脚本崩溃或者写入失败。

小提示

要是你的PHP跑在Apache/Nginx的FastCGI模式下,确保服务器会把两个请求分配到不同的PHP进程,这样才能真正触发并发竞争哦。

内容的提问来源于stack exchange,提问作者OmegaSkiller

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:05:12