【问题标题】:php script locked because of 'require'php 脚本因为 'require' 而被锁定
【发布时间】:2013-10-05 14:06:11
【问题描述】:

你好,我有这样的代码:

file1.php:

session_start();
$object1 = new object1($_SESSION['variable']);

switch($_GET['variableGet']){
    case 'a': $object2 = new object2(); break;
    case 'b': $object2 = new object2(); break;
}
/*
etc etc
*/

file2.php:

require_once('file1.php');
sleep(5);
$object2->doSomethingForFile2();
echo 'file2 is done!';

file3.php:

require_once('file1.php');
sleep(7);
$object2->doSomethingForFile3();
echo 'file 3 is done!';

使用 AJAX 我正在调用 file2.php 和 file3.php。

我想做的事:

我希望 file2 和 file3 同时启动。

问题:

file3 正在等待 file2 -> 当 file2 完成时(5 秒后),然后 file3 启动脚本并且整个 ajax 在 12 秒内加载(睡眠(5)+睡眠(7)),而不是 7 秒。

自己的观察:

这个问题依赖于*require_once(file1.php)*,在file2和file3中使用。如果我会运行这样的代码:

file2.php:

sleep(5);
echo 'file2 is done!';

file3.php:

sleep(7);
echo 'file 3 is done!';

整个数据在 7 秒内加载(5 秒后 file2.php,然后 2 秒后 file3.php)

【问题讨论】:

  • 我的猜测是,file1.php 中有一些锁定。我无法重现此行为。能否提供更多关于 file1.php 的信息?
  • 你是在 file1.php 中使用会话吗?
  • 我已经更新了我的问题

标签: php ajax require file-locking


【解决方案1】:

会话数据被锁定以防止并发写入任何时候只有一个脚本可以对会话进行操作。因此,您的第二个脚本等待第一个脚本完成。当您不再使用会话变量时,应使用session_write_close 关闭会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    相关资源
    最近更新 更多