067 607 57 84
МЕНЮ

Асинхронне виконання php - скриптів

Буває, що в процесі роботи якогось скрипта необхідно виконати інший скрипт і чекати, поки він закінчить свою роботу. Наприклад: У шапці нашого скрипта буде код, який здійснює пошук по XML файлу потрібного, унікального, рядка і якщо її немає - додає її (наприклад це рядок IP адреси користувача і USER_AGENT). Так ось - поки цей скрипт відпрацює - пройдуть секунди - навіщо користувачеві чекати цей час, адже йому потрібно побачити завантажений сайт відразу, адже результат роботи скрипта не вплине на подальшу роботу користувача на сайті.

Є кілька варіантів вирішення цього питання. Один з них - сокети.

function RunAsynchronous($url, $options= array())
{
    $parts = parse_url($url);
     if (!$open = fsockopen($parts['host']))
    {
        return false;
    }
    $data = http_build_query($options, '', '&');
    fwrite($open, "POST " . (!empty($parts['path']) ? $parts['path'] : '/') . " HTTP/1.1\r\n");
    fwrite($open, "Host: " . $parts['host'] . "\r\n");
    fwrite($open, "Content-Type: application/x-www-form-urlencoded\r\n");
    fwrite($open, "Content-Length: " . mb_strlen($data,"UTF-8") . "\r\n");
    fwrite($open, "Connection: Close\r\n\r\n");
    fwrite($open, $data);
    fclose($open);
    return true;
}
                    

Приклад використання:

RunAsynchronous('http://site/asynchronous-script.php', array('time' => time()));
                    

У asynchronous-script.php буде доступний $ _POST['time']. Тому в функції RunAsynchronous $options у нас масив, ми можемо передавати скільки завгодно параметрів.