Как стать автором
Обновить

Комментарии 5

Сомнительный пример. Он не дает представления о том зачем вообще избегать блокирующих вызовов. Это как в учебниках про ООП где рассказывают о животных и зоопарке. Вроде все понятно а где и как применять в реальной жизни не понятно
Программист пишет книгу и не знает, что текущая директория процесса вообще-то не обязана быть той же директорией, где лежит исполняемый файл?

Если ваш пример запустят, условно говоря, вместо
php ./index.php

так:
php ./public/index.php

всё моментально сломается и починить это начинающему будет крайне сложно. Потому что вы ему не объяснили, почему нужно использовать абсолютные пути и как это правильно делать в PHP.

Неиспользование __DIR__ — это вредительство, конечно. Зато асинхронный реакт, ага.
Спасибо за фидбэк, очень ценное замечание. Поправлю этот момент в след вересии книги.
__DIR__ тут не поможет, так, как зависимости мигрируют по файлам, и не факт что вызов кода произойдет в файле той же директории, что и стартовый файл. В такой ситуации только хардкор, только getcwd().
Поможет, не нужен хардкор) При создании дочерних процессов можно указать их Current working directory. Соответственно достаточно передать её в обработчик запроса:

'/' => function (ServerRequestInterface $request, LoopInterface $loop, $cwd) {
    $childProcess = new Process('cat pages/index.html', $cwd);
    $childProcess->start($loop);

    return new Response(
        200, ['Content-Type' => 'text/html'], $childProcess->stdout
    );
}
Зарегистрируйтесь на Хабре, чтобы оставить комментарий