Apache же блокировка запроса orgin

Когда я пытаюсь загрузить две одинаковые страницы со своего сервера в разные вкладки одного и того же браузера, он ждет завершения одной из них, прежде чем запускать другую. Это нормально, но у меня есть процесс cron, который должен вызывать несколько вызовов одного и того же скрипта, и у меня не может быть такого типа блокирующего поведения. Я думаю, это потому, что процесс имеет один и тот же сеанс / соединение с сервером, а поведение по умолчанию - разрешать только один запрос за раз из одного и того же источника... как я могу обойти это? Я хочу, чтобы процесс cron мог запускать вызовы одного из моих сценариев, а apache запускал новый экземпляр целевого сценария для обработки запроса каждого из них. Это возможно?

2 ответа

Решение

Используете ли вы стандартные файловые сессии PHP? PHP блокирует сеанс, когда вы делаете session_start() и держит файл заблокированным до выхода из скрипта, или вы делаете session_write_close(),

Это предотвращает обслуживание любых ДРУГИХ страниц, поддерживающих сеанс, поскольку они не могут получить доступ к файлу сеанса, пока не будет снята блокировка.

session_write_close () может быть вызван в любой точке скрипта. Все, что он делает, это записывает массив _SESSION, как он есть в данный момент, но оставляет массив доступным для чтения. Вы всегда можете повторно открыть сеанс позже в сценарии, если вам необходимо внести какие-либо изменения.

По сути, вы бы

<?php

session_start(); // populate $_SESSION;
session_write_close(); // relinquish session lock

.... dome some really heavy duty long computations

session_start();
$_SESSION['somekey'] = $new_val;

Я не думаю, что есть какие-либо проблемы с PHP продолжаться, на самом деле мне нравится, как он ведет себя

Используйте продолжить 2; потому что continue будет действовать так же, как тормоз в коммутаторе, и циклы for, while, foreach и т. д. будут продолжать свое движение после выхода из коммутатора.

В следующем примере будет отображаться только 1, потому что я отключаюсь от коммутатора и продолжаю работу foreach.

$ Un_array= массив (1,2);

foreach ($ un_array как $num)
{
    Переключатель ($ Num)
    {
        Случай 1:
        //ничего такого
        перерыв;
        случай 2:
            продолжить 2;
        перерыв;
    }

    echo $ num;

}

выход;
Другие вопросы по тегам