Search code examples
phplinuxrubygemscompass-sass

Processing Gem Data


I have a question regarding running a shell command via PHP. My goal is to successfully run compass compile [project] via PHP. I have tried the following:

echo system('compass compile [project]', $s); // prints [31m[0m
echo $s; // prints 1

echo passthru('compass compile [project]', $p); // prints [31m[0m
echo $p; // prints 1

echo shell_exec('compass compile [project]'); // prints [31m[0m

echo exec('compass compile [project]', $e, $ee);
print_r($e); // Array ( [0] => [31m[0m )
echo $ee; // prints 1

I even tried running a shell command to an executable file that contained compass compile test and I still got the same results as the trials above.

My questions What does [31m[0m mean? Does this represent binary data? Do these represent bash colors as search engines suggest?

As far as I know, the output should be the following:

Sample output

For kicks, I tried to execute via system(/usr/local/bin/compass compile [project]); and I got the same result. I double checked my path so I know I can execute these commands as expected. Here is the output from echo $PATH:

/usr/lib/lightdm/lightdm:
/usr/local/sbin:
/usr/local/bin:
/usr/sbin:
/usr/bin:
/sbin:/bin:
/usr/games:
/usr/local/games:
/var/lib/gems/1.9.1/bin

Is there a way to compile compass projects using PHP?


Solution

  • The issue was fixed by using sass --compass and redirecting the stderr to stdout via echo shell_exec("sass --compass [project] 2>&1");

    It was a pretty long and arduous process figuring this out since it's been awhile since I've dabbled in command line programs. Remember that error streams and output streams might be on different outputs. The easiest way to test this is to shovel the output into a file via:

    # do this once with a good file and once with a file that will give errors
    sass --poll style.scss > output.txt
    

    Stderr shoveled to text file yields no results

    If output.txt is empty then the error output is on the stderr stream such as the case above. We can correct this by redirecting the stderr to the srdout. For example:

    sass --poll > output.txt 2>&1
    
    #shows results
    cat output.txt
    

    Stderr to stdout

    I created a simple PHP script that redirects the output from one textarea to the other. The code can be found here.