Как запустить компилятор LESS из PHP (используя Symfony)? - PullRequest
3 голосов
/ 15 сентября 2011

У меня проблемы с выполнением компилятора lessc из PHP.Я использую Symfony и пробовал использовать sfLESSPlugin, но безуспешно.Я поместил свой код в фильтр, который выполняется до отображения страницы, чтобы каждый раз, когда страница обновлялась, мои файлы LESS компилировались в один файл CSS (не нужно перекомпилировать вручную каждый раз, когда я вносил изменения,по крайней мере пока я развиваюсь).Вот различные варианты, которые я пробовал:

$fs = new sfFilesystem();
$command = '/Users/jordanb/node/node_modules/less/bin/lessc less/bootstrap.less css/bootstrap.css';

try
{
  $fs->execute($command, null, array($this, 'throwCompilerError'));
}
catch (RuntimeException $e)
{
  return false;
}

Это возвращает ошибку: «Ошибка выполнения команды» с кодом ошибки 127. При копании глубже в execute () Symfony он вызывает proc_open (), а затем proc_close ().Некоторые онлайн-исследования показали, что код ошибки 127 означает, что команда не найдена.

Выполнение точно такой же команды в командной строке работает просто отлично.

Чтобы быть уверенным, я выполнил chmod 777 в / Users / jordanb / node / node_modules / less / bin / lessc, просто чтобы убедиться, что это не проблема с разрешениями.Все еще не работал.

Я также попробовал просто "lessc" вместо полного пути, который не работал.Я добавил lessc в мой путь к классам, поэтому, набрав «which lessc», я получаю /Users/jordanb/node/node_modules/less/bin/lessc".

Я также попробовал простое:1015 *

который, похоже, ничего не делал.Я напечатал вывод в журнал ошибок PHP, а также в текстовый файл, и вывод был пустым в обоих случаях.Я также попытался использовать полный путь в этом случае.

1 Ответ

2 голосов
/ 15 сентября 2011

Вы можете создать сценарий оболочки, который компилирует вещи так, как вы хотите:

compile_css.sh

/Users/jordanb/node/node_modules/less/bin/lessc less/bootstrap.less css/bootstrap.css

Затем

chmod +x compile_css.sh

И, наконец, вызовите его изваш скрипт

$command = '/path/to/compile_css.sh';

Это даст вам больше контроля над тем, что вы можете выполнить, но если вы все еще хотите сделать это из php, попробуйте следующее:

$command = '/Users/jordanb/node/node_modules/less/bin/lessc "less/bootstrap.less css/bootstrap.css"';
// note the quotes around the arguments.
...