phpsass返回一个致命错误

phpsass返回一个致命错误,php,sass,Php,Sass,我使用一个非常简单的代码来测试phpsass $sass = new SassParser(); $c = file_get_contents('/_www/_projects/cdn/public_html/test/test.sass'); $css = $sass->toCss($c); sass文件非常基本: $blue: #3bbfce; $margin: 16px; table.hl { margin: 2em 0; td.ln { text-align:

我使用一个非常简单的代码来测试phpsass

$sass = new SassParser();
$c = file_get_contents('/_www/_projects/cdn/public_html/test/test.sass');
$css = $sass->toCss($c);
sass文件非常基本:

$blue: #3bbfce;
$margin: 16px;

table.hl {
  margin: 2em 0;
  td.ln {
    text-align: right;
  }
}

li {
  font: {
    family: serif;
    weight: bold;
    size: 1.2em;
  }
}

.content-navigation {
  border-color: $blue;
  color:
    darken($blue, 9%);
}

.border {
  padding: $margin / 2;
  margin: $margin / 2;
  border-color: $blue;
}
我得到以下错误:

致命错误:未捕获异常“SassNumberException”,在第201行的D:\\ u www\\ u git\phpsass\script\literals\SassNumber.php中显示消息“SassNumberException”

SassNumberException:Number必须是数字:Array::26来源:padding:$margin/2;在第201行的D:\\ www\\ u git\phpsass\script\literals\SassNumber.php中

如果有帮助的话,之前也会抛出以下通知(我试图更改错误报告级别,但让通知消失当然不能解决问题):

注意:第25行D:\\ u www\\ u git\phpsass\SassException.php中的数组到字符串转换

如果我对他们的在线PHP编译器使用相同的sass代码,它会正确编译。。。我不明白

看看这个。函数
toCss()
有第二个参数,名为
$isFile
,默认情况下为
true

public function toCss($source, $isFile = true) {
    return $this->parse($source, $isFile)->render();
}
如果您注意到,您正在传递的是源代码,而不是文件名。您可以这样传入文件名:

$sass = new SassParser();
$c = '/_www/_projects/cdn/public_html/test/test.sass';
$css = $sass->toCss($c);
或者使用
tocs()
上的附加参数执行您试图执行的操作:


事实上,这是一个纯粹的句法问题。我试图从sass代码中删除变量,并意识到它工作得不好(
margin:2em 0
变成了
margin:20
),但不再有错误

我从中获取的sass片段不是sass,而是scss格式。SassParser类有一个名为syntax的参数,该参数默认设置为“sass”,在调用
$scss=new SassParser(['syntax'=>'scss'])时需要设置为scss


然而,我需要解析一个字符串,而不是一个文件,但是如果你传递一个带有scss扩展名的文件,你就不需要这个额外的参数。

你的sass文件根本不是真正的sass;这将是正确的语法,基本上去掉所有尾随分号:

$blue: #3bbfce
$margin: 16px

table.hl {
  margin: 2em 0
  td.ln {
    text-align: right
  }
}

li {
  font: {
    family: serif
    weight: bold
    size: 1.2em
  }
}

.content-navigation {
  border-color: $blue
  color
    darken($blue, 9%)
}

.border {
  padding: $margin / 2
  margin: $margin / 2
  border-color: $blue
}
或者像你建议的那样:

$sass = new SassParser(['syntax' => SassFile::SCSS]);

是的,这个参数存在,我没有看到它,但是当找不到文件时,它仍然使用string方法,因此添加一个false参数并没有改变问题。但是我发现了一些东西(见更新)是的,我知道,我被这个网站弄糊涂了(他们的frontpage只是SCS,他们是sass上的谷歌1号,我只是看得不够多;)
$sass = new SassParser(['syntax' => SassFile::SCSS]);