скрипт php заблокирован из-за 'require'

Привет, у меня есть такой код:

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 секунд (sleep (5) + sleep (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)


person Maciej Treder    schedule 05.10.2013    source источник
comment
Я предполагаю, что в file1.php происходит некоторая блокировка. Я не могу воспроизвести такое поведение. Не могли бы вы предоставить нам больше информации о file1.php?   -  person Kontrollfreak    schedule 05.10.2013
comment
Вы используете сеансы в file1.php?   -  person Musa    schedule 05.10.2013
comment
Я обновил свой вопрос   -  person Maciej Treder    schedule 05.10.2013


Ответы (1)


Данные сеанса заблокированы, чтобы предотвратить одновременную запись, только один сценарий может работать в сеансе в любое время. Поэтому ваш второй сценарий ждет завершения первого. Вы должны использовать session_write_close, чтобы закрыть сеанс, когда вы больше не используют переменные сеанса.

person Musa    schedule 05.10.2013