Как запустить консольную команду (npm) из кода php?
Я пытаюсь выполнить команду npm --version из php. Пробовал использовать стандартный shell_exec и Process от Symfony. Вот собственно код:
<?php
namespace App\Http\Controllers;
use Symfony\Component\Process\Process;
class Home extends Controller
{
public function main()
{
dd([
'Via exec:' => $this->tryRunNpmViaExec(),
'Via process:' => $this->tryRunNpmViaProcess()
]);
}
public function tryRunNpmViaExec()
{
return shell_exec('npm --version 2>&1');
}
public function tryRunNpmViaProcess()
{
$process = new Process(['npm', '--version']);
$process->run();
if (!$process->isSuccessful()) {
return $process->getErrorOutput();
}
return $process->getOutput();
}
}
На выходе в браузере получаю следующее:
А вот я вызываю ту же самую команду npm --version из терминала phpStorm и командной строки Windows:
То есть значения переменной среды PATH у меня настроены и любые npm команды работают, но только не при выполнении из php. С чем это может быть связано и как я могу это исправить?
Ответы (1 шт):
Используйте функцию exec(), чтобы выполнять команды. Первым аргументом передается сама команда, для выполнения, а вторым аргументом output (вывод) выполнения команды. Также, если задать третий параметр, то можно получить статус выполнения команды. Ниже переделан Ваш код под функцию exec()
<?php
namespace App\Http\Controllers;
class Home extends Controller
{
public function main()
{
dd($this->tryRunNpmViaExec());
}
public function tryRunNpmViaExec()
{
return exec('npm --version');
}
}

