@photosho

Как запустить Gulp из Php?

Пытаюсь запустить gulp из PHP. Делаю либо, через "shell_exec", либо, через "system" с запуском bat-файла. В обоих случаях просто ничего не происходит. Причем, во втором случае bat-файл запускается, но команда "gulp" не дает результата. Если запустить файл вручную из Windows, то все работает. Использую OpenServer. Подскажите, в чем может быть проблема.
  • Вопрос задан
  • 178 просмотров
Пригласить эксперта
Ответы на вопрос 2
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Из PHP этого делать не нужно, вы все равно не получите потока данных, только поток отчетов.

Напишите "npm init", и в файле package.json сделайте секцию "scripts", потом запускайте из консоли перед установкой проекта на новую машину "npm run my_script_that_runs_gulp".

То есть проект оборачивают в контейнеры, чтобы это автоматизировать, а не заставляют язык программирования делать всё, тем более чтобы это запустить все равно придется открыть консоль и вызвать команду с php, или пройти по ссылке, чтобы веб сервер сделал это для вас.

Способ есть, для этого надо искать в доке как выдать на выход поток самих данных из функций галпа, который все равно сделан на node, перенаправить их в stdout, и мы можем подписаться на поток данных зачем-то и что-то с ними делать, но обычно это не нужно, т.к. галп это и есть обертка для потоков на node js.
Ответ написан
t-alexashka
@t-alexashka
Сразу пишу legacy код
По хорошему вам сначала нужно узнать все env переменные которые у вас в юзере есть из которого вы запускаете из консоли сборщик. для этого введите env

Потом подсуньте вывод PATH в putenv и пути до ноды и npm в соотвествующие переменные.

Вот пример рабочего сборщика на нашем проекте (запускается из браузера при совпадении в GET секретного ключа который сами укажите):

<?php
ini_set('output_buffering', '0');

$documentRoot = dirname(dirname(__DIR__));

putenv('LANG=C');
putenv('LC_ALL=C');
putenv('PATH=/home/gituser/.nvm/versions/node/v16.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin');
putenv("SHELL=/bin/bash");
putenv("HOME=/home/gituser");
putenv("COMPOSER_HOME=$documentRoot/.composer");

$key = 'MY_SECRET_KEY';
$php = '/usr/bin/php';
$composer = "$php /usr/local/bin/composer";
$node = "~/.nvm/versions/node/v16.13.0/bin/node";
$npm = "~/.nvm/versions/node/v16.13.0/bin/npm";

if (isset($_GET['key']) && @$_GET['key'] == $key)
{
    echo '<pre> Update...'.PHP_EOL;

    $cmd_arr = [
		"cd $documentRoot && $node $npm i",
		"cd $documentRoot && gulp build --env=prod",
    ];

    foreach ($cmd_arr as $cmd){
        echo PHP_EOL.PHP_EOL."<b>$cmd</b>".PHP_EOL;
        system("{ $cmd; } 2>&1");
        flush();
    }

    echo '<hr> Done.'.PHP_EOL;
    exit;
}

header('HTTP/1.1 404 Not Found');
echo '404 Not Found.';
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы