Как я должен избежать этой строки правильно?

Я пытаюсь скомпилировать содержимое файла Sass (.scss), используя shell_exec или же exec, не proc_open, Не спрашивайте меня, почему я не просто передаю сам файл или использую proc_open, цель здесь — передать содержимое через stdin, переданный по каналу echo,

Я думаю, что в строке есть символы, которые нарушают команду, но я не могу понять, какие именно. Я на Ubuntu 14.04, работает PHP 5.6 и в этом случае CLI.

Вы можете запустить это, чтобы убедиться в этом (понадобятся Ruby и Sass):

sudo apt-get установить Ruby && sudo gem установить 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"));
}

0

Решение

Тебе стоит попробовать :

$ esc = ‘$’. escapeshellarg ($ input);

escapeshellarg() Функция экранирует одинарные кавычки с обратной косой чертой, что означает, что:
escapeshellarg("//where's the quote") становиться 'where\'s the quote', Вы не можете отображать одинарные кавычки внутри одинарных кавычек в (bash) оболочке, смотрите: Как избежать одиночной кавычки в строке одинарных кавычек в Bash?

0

Другие решения

Я думаю, что проблема была в том, что команда была слишком длинной, когда я интерполировал всю входную строку. Решение заключается в использовании proc_open или же popen записывать на стандартный ввод, а не на канал |,

0

По вопросам рекламы [email protected]