При старте сессии в нескольких файла, другие файлы не откроются, пока не отработает каждый скрипт

230
29 марта 2017, 18:47

Такой вопрос интересный.

Есть 2 файла file1.php file2.php

Содержимое

//file1.php
<?php
session_start();
$time = time() + 3;// Ждем 3 секунды, а потом отдаем ответ
while( time() <= $time ){}
echo 'okay';

//file2.php
<?php
session_start();
echo 'Открыт file2.php';

Когда я открываю файл в браузере file1.php, он запускает цикл, и ждет его обработку, после чего выдает строку 'okay';

И в этот же момент когда file1 в обработке, я пытаюсь открыть file2.php, и тут самое интересное, file2.php не открывается, пока не выполнится цикл в file1.

Если убрать

session_start();

в file1 ИЛИ в file2, тогда file2.php открывается без ожидания завершения цикла в file1.

Вопрос: Почему так происходит при старте сессии в обеих файлах, и как решить эту проблему, чтобы file2.php можно было открыть без ожидания завершения цикла в file1.php?...

Answer 1

Если мы знаем, что в сессии не надо ничего изменять, мы можем просто прочитать ее переменные и сразу закрыть, чтобы не блокировать файл сессии, который может понадобиться другим сессиям.

В этом случае file1.php может выглядеть так:

<?php
session_start([
    'read_and_close'  => true
]);
$time = time() + 3;// Ждем 3 секунды, а потом отдаем ответ
while( time() <= $time ){}
echo 'okay';

Данный пример относится к PHP7, где в функции session_start() имеется параметр options. Для более младших версий PHP в данном случае для решения проблемы надо использовать функцию session_name, позволяющую установить имя текущей сессии.

READ ALSO
phpmyadmin не добавляет в базу данные

phpmyadmin не добавляет в базу данные

перешёл с Windows на Linux Mint , на Windows на сервере выполнялись все php скрипты , развернул сервер на Linux и скрипт не добавляет данные в базу , предполагаю...

222
Проблема с правами доступа + PHP + Windows 7

Проблема с правами доступа + PHP + Windows 7

Написал скрипт для отправки файла по почте:

276
Can&#39;t create/write to file

Can't create/write to file

ЗдравствуйтеMySQL стал выбивать ошибку:

228