2011-09-14 37 views
3

我在執行PHP的lessc編譯器時遇到了問題。我正在使用Symfony,並嘗試使用sfLESSPlugin,但一直不成功。我已經將代碼放入了一個過濾器,該過濾器在頁面呈現之前執行,以便每次頁面刷新時,我的LESS文件都會被編譯爲一個CSS文件(不想每次進行更改時手動重新編譯,至少在我開發的時候)。以下是我已經嘗試了不同的變化:如何從PHP執行LESS編譯器(使用Symfony)?

$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更深的挖掘的Symfony的execute(),它調用proc_open(錯誤代碼)和然後proc_close()。一些在線研究告訴我,127的錯誤代碼意味着沒有找到該命令。

在命令行上運行完全相同的命令工作得很好。

爲了確保它不是權限問題,我在/ Users/jordanb/node/node_modules/less/bin/lessc上執行了chmod 777。仍然沒有工作。

我也試過只是「lessc」,而不是完整的路徑,這是行不通的。我在我的類路徑中添加了lessc,因此輸入「which lessc」給了我「/ Users/jordanb/node/node_modules/less/bin/lessc」。

我也試過一個簡單的:

shell_exec('lessc less/bootstrap.less css/bootstrap.css'); 

這似乎並沒有做任何事情。我將輸出打印到PHP錯誤日誌以及文本文件中,並且輸出在兩種情況下均爲空。我也嘗試在這種情況下使用完整路徑。

回答

2

您可以使編譯的東西,你所希望的方式shell腳本:

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.