-
-
Save richthegeek/5865960 to your computer and use it in GitHub Desktop.
<?php | |
function compileSass($filename, $cached = true) { | |
$cache_dir = './phpsass_cache'; | |
# if cached, ensure we can write to the cache directory | |
if ($cached) { | |
if (!file_exists($cache_dir) && !mkdir($cache_dir)) { | |
throw 'SASS cache directory does not exist and cannot be created'; | |
} | |
if (!is_writable($cache_dir)) { | |
throw 'SASS cache directory is not writable'; | |
} | |
} | |
# have to check + throw here for the hashing | |
if (!file_exists($filename)) { | |
throw 'Filename requested for compilation did not exist'; | |
} | |
# create a unique filename based on the contents of the included file | |
$contents = file_get_contents($filename); | |
$hash = md5($contents); | |
$cache_filename = $cache_dir . '/' . $hash . '_' . basename($filename); | |
# if we have a cache hit, return it now. | |
if ($cached && file_exists($cache_filename)) { | |
return file_get_contents($cache_filename); | |
} | |
# no cache hit, so compile as usual | |
require_once './phpsass/SassParser.php'; | |
$syntax = substr($file, -4, 4); | |
$options = array( | |
'style' => 'expanded', | |
'cache' => false, # yes, this is ironic | |
'syntax' => $syntax, | |
'debug' => false | |
); | |
$parser = new SassParser($options); | |
$contents = $parser->toCss($filename); | |
# save to cache | |
if ($cached) { | |
file_put_contents($cache_filename, $contents); | |
} | |
return $contents; | |
} |
<?php | |
function compileSass($filename, $cached = true) { | |
$cache_dir = './phpsass_cache'; | |
# if cached, ensure we can write to the cache directory | |
if ($cached) { | |
if (!file_exists($cache_dir) && !mkdir($cache_dir)) { | |
throw 'SASS cache directory does not exist and cannot be created'; | |
} | |
if (!is_writable($cache_dir)) { | |
throw 'SASS cache directory is not writable'; | |
} | |
} | |
# have to check + throw here for the hashing | |
if (!file_exists($filename)) { | |
throw 'Filename requested for compilation did not exist'; | |
} | |
# create a unique filename based on the contents of the included file | |
$contents = file_get_contents($filename); | |
$cache_filename = $cache_dir . '/' . basename($filename); | |
# if we have a cache hit, return it now. | |
if ($cached && file_exists($cache_filename)) { | |
$source = filemtime($filename); | |
$target = filemtime($cache_filename); | |
if ($target >= $source) { | |
return file_get_contents($cache_filename); | |
} | |
} | |
# no cache hit, so compile as usual | |
require_once './phpsass/SassParser.php'; | |
$syntax = substr($file, -4, 4); | |
$options = array( | |
'style' => 'expanded', | |
'cache' => false, # yes, this is ironic | |
'syntax' => $syntax, | |
'debug' => false | |
); | |
$parser = new SassParser($options); | |
$contents = $parser->toCss($filename); | |
# save to cache | |
if ($cached) { | |
file_put_contents($cache_filename, $contents); | |
} | |
return $contents; | |
} |
Hi Rich,
sorry for waiting, i have a lot of trouble last week.
This week doesn't look better, but i taked some minutes to test your code.
Now the cache-method works, and i do a small change in https://gist.github.com/aspross/5870297.
I renamed the cache files in ".css" instead of ".sass".
I hope to find time this week to look for a solution on the include problem.
I want to generate a css file for every imported sass-file.
If you have an idea to solve it, i will be very happy.
Hi Rick,
i added a few changes on the code.
See on https://gist.github.com/aspross/5937524.
Now, i'm able to compile imports.
But my problem now, is when i do changes on an import like layout.sass,
example : @import url("/tmp/sass/layout.sass"). ( content from style.sass)
I didn't update my layout.css.
Only if my main css file called style.sass have any changes, i compiled my imports.
I make a comment on the place i think we have to check the import changes :
// Check the imports in $filename
// if changes on importfiles, replace the import files
Maybe you have any ideas to solve it.
Hi Rich,
good news, i found a solution.
You can found it on https://gist.github.com/aspross/5941082.
Now it will recompile the sass files, if i make any changes on an import sass file.
I know i can probably improve the code, but for now i think it's ok.
Me and my cousin have to test this script to find eventually errors.
Maybe you can test it too and give some feedback ;)
I've added a second file which uses mtime instead of hashing for recompiling on save and cache naming.