同时多个 php 请求,第二个请求直到第一个请求完成后才完成

问题描述 投票:0回答:1

当我使用带有 PHP 5.6 的 XAMP 服务器时

  • sleep(10) // 休眠10秒并调用其他localhost的php文件,即可顺利工作。

当我使用带有 PHP 7.4.9 的 XAMP 服务器时

  • sleep(10) // 休眠 10 秒并调用其他本地主机文件,它将挂起直到第一次完成

-- 我需要更改请求的 XAMP 配置的任何内容都不会等到第一次完成

php codeigniter xampp php-7.4
1个回答
0
投票

要了解与 PHP 会话处理相关的问题和解决方案,让我们澄清一下场景:

当调用 session_start() 时,PHP 会锁定会话文件以防止并发写入和不一致。这意味着如果您打开两个都调用 session_start() 的脚本,并且第一个脚本需要很长时间才能执行,则第二个脚本将必须等到第一个脚本完成。

文件1.php

  <?php
    session_start();
    sleep(1);
    echo "I am File1";
    ?>

文件2.php:

<?php
session_start();
sleep(10);
echo "I am File2";
?>

当您先运行 File2.php,然后运行 File1.php 时,File1.php 将必须等待 File2.php 完成,因为会话文件被 File2.php 锁定。

解决方案: 要解决此问题,您可以在启动会话之后和长时间运行的进程之前调用session_write_close()。这会释放会话文件锁,允许其他脚本启动其会话。

文件1.php:

<?php
session_start();
session_write_close();
sleep(1);
echo "I am File1";
?>

文件2.php:

<?php
session_start();
session_write_close();
sleep(10);
echo "I am File2";
?>

现在,当您先运行 File2.php,然后运行 File1.php 时,File1.php 将不会等待 File2.php 完成,因为 File2.php 在启动会话后立即释放会话文件锁。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.