У меня есть веб-приложение php, и на одном из маршрутов я пытаюсь выполнить скрипт узла.
Расположение скрипта узла: C:\Users\meusr\Workspace\www\myproject\directImport.js
Я настроил свой package.json так, чтобы npm start выполнял вышеуказанный скрипт.
Исполняемый файл index.php приложения php (laravel), расположенный по адресу: C:\Users\meusr\Workspace\www\myPHPproject\public\
И на одном из моих маршрутов: импортер / бег
Я имею:
$commandToRun = "npm start --prefix ". env('IMPORTER_PATH'). " /dev/null 2>&1";
Где IMPORTER_PATH настроен в моем env, как: IMPORTER_PATH = C:\Users\meusr\Workspace\www\myproject\
когда я пытаюсь выполнить команду с exec
exec($commandToRun, $output);
Страница продолжает загружаться без вывода, без ошибок и без конца.
Сценарий не имеет проблем, и выполнение той же команды в командной строке в системе Windows работает:
npm start --prefix C:\Users\meusr\Workspace\www\myproject\
выходы, как и ожидалось.
Сначала я подумал, что это проблема с разрешением (что должно было вызвать ошибку, но я все еще пытался запустить другую команду)
exec('npm -v', $output);
который выводит мою версию npm.
Точно так же я пытался использовать просто node directImport.js
что тоже не сработало.
Затем попытался изменить каталог на каталог, в котором находится файл узла, и снова выполнил команду.
exec(cd C:\Users\meusr\Workspace\www\myproject\ && dir /dev/null 2>&1) // this works, but:
exec(cd C:\Users\meusr\Workspace\www\myproject\ && node directImport.js /dev/null 2>&1) // this didn't work
Благодаря miken32 у меня сработало:
<?php
$commandString = 'start /b c:\\programToRun.exe -attachment "c:\\temp\file1.txt"';
pclose(popen($commandString, 'r'));
?>
Других решений пока нет …