Я пытаюсь скомпилировать содержимое файла Sass (.scss), используя shell_exec
или exec
, неproc_open
. Не спрашивайте меня, почему я просто не передаю сам файл или не использует proc_open, цель здесь - передать содержимое через stdin, с номером echo
.Как мне избежать этой строки правильно?
Я думаю, что есть несколько символов в строке, которые прерывают команду, но я не могу понять, какой. Я на Ubuntu 14.04, работая с PHP 5.6 и в этом случае CLI.
Вы можете запустить, чтобы увидеть для себя (нужно будет рубин и Sass установлен):
Sudo APT-получить установку рубин & & Судо камень установить SASS
<?php
/** Should work with '$large = true' and '$download = false' **/
// to prove that a small file DOES compile via stdin
$large = true;
// to prove that it's compilable as a file, rather than stdin
$download = false;
$domain = "http://test.fhmp.net";
$file = $large ? 'large' : 'small';
// grab a valid .scss file
$input = file_get_contents("$domain/$file.scss");
if($download){
// create temp file
$temp = tempnam(sys_get_temp_dir(), '');
file_put_contents($temp, $input);
// compile temp file
var_dump(shell_exec("sass --scss '$temp' 2>&1"));
// delete temp file
@unlink($temp);
} else {
// attempt to escape it
$esc = escapeshellarg($input);
// dump the results of the shell call
var_dump(shell_exec("echo $esc | sass --scss --stdin 2>&1"));
}
Вы должны действительно сообщить об ошибке здесь и где это происходит. – Brad
Извините за потенциально немой комментарий, но для тройного, вам не нужен оператор сравнения для того, что вы пытаетесь сделать здесь? -> $ file = $ large? 'большой маленький'; // Должен быть $ file === $ large? 'большой маленький'; //правильно? –
@TheOneandOnlyChemistryBlob, я на самом деле назначаю строку '$ file', которая будет либо« большой », либо« малой »в зависимости от правды' $ large' – rtheunissen