Комментарии 5
Сомнительный пример. Он не дает представления о том зачем вообще избегать блокирующих вызовов. Это как в учебниках про ООП где рассказывают о животных и зоопарке. Вроде все понятно а где и как применять в реальной жизни не понятно
0
Программист пишет книгу и не знает, что текущая директория процесса вообще-то не обязана быть той же директорией, где лежит исполняемый файл?
Если ваш пример запустят, условно говоря, вместо
так:
всё моментально сломается и починить это начинающему будет крайне сложно. Потому что вы ему не объяснили, почему нужно использовать абсолютные пути и как это правильно делать в PHP.
Неиспользование __DIR__ — это вредительство, конечно. Зато асинхронный реакт, ага.
Если ваш пример запустят, условно говоря, вместо
php ./index.php
так:
php ./public/index.php
всё моментально сломается и починить это начинающему будет крайне сложно. Потому что вы ему не объяснили, почему нужно использовать абсолютные пути и как это правильно делать в PHP.
Неиспользование __DIR__ — это вредительство, конечно. Зато асинхронный реакт, ага.
+1
Спасибо за фидбэк, очень ценное замечание. Поправлю этот момент в след вересии книги.
0
__DIR__ тут не поможет, так, как зависимости мигрируют по файлам, и не факт что вызов кода произойдет в файле той же директории, что и стартовый файл. В такой ситуации только хардкор, только getcwd().
0
Поможет, не нужен хардкор) При создании дочерних процессов можно указать их
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
);
}
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Рендеринг HTML файлов: глава из книги «ReactPHP для начинающих» от разработчика Skyeng