Такой вопрос интересный.
Есть 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?...
Если мы знаем, что в сессии не надо ничего изменять, мы можем просто прочитать ее переменные и сразу закрыть, чтобы не блокировать файл сессии, который может понадобиться другим сессиям.
В этом случае 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
, позволяющую установить имя текущей сессии.
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
перешёл с Windows на Linux Mint , на Windows на сервере выполнялись все php скрипты , развернул сервер на Linux и скрипт не добавляет данные в базу , предполагаю...