当我使用带有 PHP 5.6 的 XAMP 服务器时
当我使用带有 PHP 7.4.9 的 XAMP 服务器时
-- 我需要更改请求的 XAMP 配置的任何内容都不会等到第一次完成
要了解与 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 在启动会话后立即释放会话文件锁。