Буває, що в процесі роботи якогось скрипта необхідно виконати інший скрипт і чекати, поки він закінчить свою роботу. Наприклад: У шапці нашого скрипта буде код, який здійснює пошук по 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 у нас масив, ми можемо передавати скільки завгодно параметрів.