ci4

Форк
0
/
HotReloader.php 
72 строки · 1.7 Кб
1
<?php
2

3
declare(strict_types=1);
4

5
/**
6
 * This file is part of CodeIgniter 4 framework.
7
 *
8
 * (c) CodeIgniter Foundation <admin@codeigniter.com>
9
 *
10
 * For the full copyright and license information, please view
11
 * the LICENSE file that was distributed with this source code.
12
 */
13

14
namespace CodeIgniter\HotReloader;
15

16
/**
17
 * @internal
18
 */
19
final class HotReloader
20
{
21
    public function run(): void
22
    {
23
        if (session_status() === PHP_SESSION_ACTIVE) {
24
            session_write_close();
25
        }
26

27
        ini_set('zlib.output_compression', 'Off');
28

29
        header('Cache-Control: no-store');
30
        header('Content-Type: text/event-stream');
31
        header('Access-Control-Allow-Methods: GET');
32

33
        ob_end_clean();
34
        set_time_limit(0);
35

36
        $hasher  = new DirectoryHasher();
37
        $appHash = $hasher->hash();
38

39
        while (true) {
40
            if (connection_status() !== CONNECTION_NORMAL || connection_aborted()) {
41
                break;
42
            }
43

44
            $currentHash = $hasher->hash();
45

46
            // If hash has changed, tell the browser to reload.
47
            if ($currentHash !== $appHash) {
48
                $appHash = $currentHash;
49

50
                $this->sendEvent('reload', ['time' => date('Y-m-d H:i:s')]);
51
                break;
52
            }
53
            if (mt_rand(1, 10) > 8) {
54
                $this->sendEvent('ping', ['time' => date('Y-m-d H:i:s')]);
55
            }
56

57
            sleep(1);
58
        }
59
    }
60

61
    /**
62
     * Send an event to the browser.
63
     */
64
    private function sendEvent(string $event, array $data): void
65
    {
66
        echo "event: {$event}\n";
67
        echo 'data: ' . json_encode($data) . "\n\n";
68

69
        ob_flush();
70
        flush();
71
    }
72
}
73

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.