这是lessc软件的一个来源,我认为它会有帮助:
https://github.com/cloudhead/less.js/blob/master/bin/lessc
问题
我在shell中使用lessc只是:
lessc file.less
我得到一个css文件输出。
我试着用打开proc_的php来实现。但当我将输入文件管道化到proc时,lessc无法获取它。我有一个错误(来自管道1):
"lessc: no input files"
在shell中等价于(参数未传递):
lessc
lessc ''
我的代码:
$descriptorspec = array(
0 => array("file", 'path/to/file/foo.less', "r"),
1 => array("pipe", "w"),
2 => array("file", '/tmp/lessCompiler-errors', "a")
);
$process = proc_open('lessc', $descriptorspec, $pipes);
if (is_resource($process)) {
$contents = stream_get_contents($pipes[1]);
fclose($pipes[1]);
proc_close($process);
}
顺便说一下,我尽量避免使用exec()函数。
我会很乐意帮助你的。
马尔金
最佳答案
今天我遇到了同样的问题,当你发布问题时,我不确定这个解决方案是否有效,但是现在你可以将“-”作为输入源传递给lessc,以便从stdin读取它。所以你只需要换一行:
$process = proc_open('lessc -', $descriptorspec, $pipes);
我花了一些时间才弄清楚所有细节,下面是我的代码片段:
/* run lessc */
$descriptors = array(
0 => array( 'pipe', 'r' ),
1 => array( 'pipe', 'w' ),
2 => array( 'pipe', 'w' ));
$process = proc_open( 'lessc --no-color -x -', $descriptors, $pipes,
'/web/less', array( 'PATH' => '/usr/local/bin/' ) );
if( !is_resource( $process ) ) {
$this->errorMessage( 'Unable to start lessc' );
exit();
}
/* write generated content */
fwrite( $pipes[0], 'some dynamically generated less code' );
fclose( $pipes[0] );
/* read compiled css */
$css = stream_get_contents( $pipes[1] );
fclose( $pipes[1] );
/* check for errors */
if( $stderr = stream_get_contents( $pipes[2] ) ) {
$this->errorMessage( "lessc error: {$stderr}" );
exit();
}
fclose( $pipes[2] );
proc_close( $process );
/* write back */
$this->write( $css );
我不得不给debian的喘息设置
PATH
,因为lessc一直在抱怨:/usr/bin/env: node: No such file or directory
,请看https://github.com/joyent/node/issues/3911--no-color
抑制错误消息中的转义代码-x
压缩css