Codeigniter-php到js和/css

Codeigniter-php到js和/css,php,.htaccess,codeigniter,Php,.htaccess,Codeigniter,我正在使用codeigniter开发一个web应用程序,我想动态生成一个CSS和一个JS文件 我的意思是,根据用户在站点上使用的模块,它应该包括不同的CSS和JS文件。类似于CSS的内容: foreach($modules as $module){ include('path/to/module/css'); } 我将把它保存在名为“modules”的类和名为“get_css()”的函数中。因此,codeigniter链接将是: 但我希望服务器认为这是一个css文件,我也希望它不在我的应用

我正在使用codeigniter开发一个web应用程序,我想动态生成一个CSS和一个JS文件

我的意思是,根据用户在站点上使用的模块,它应该包括不同的CSS和JS文件。类似于CSS的内容:

foreach($modules as $module){
  include('path/to/module/css');
}
我将把它保存在名为“modules”的类和名为“get_css()”的函数中。因此,codeigniter链接将是:

但我希望服务器认为这是一个css文件,我也希望它不在我的应用程序(即:应用程序/控制器)中,因为这可能会造成安全威胁。而是在根目录中

我想我必须对htaccess做些什么,也许可以创建另一个文件来获取该页面的内容?我实际上不知道该怎么做,和/或这是否是正确的方法


谢谢您的帮助。

您可以让get_css()方法检索css文件的内容,将它们合并在一起,然后将缓存的css文件输出到磁盘。使用散列来命名文件会很有帮助,这样您就可以只为每个模块的唯一组合生成合并的CSS文件。因此,您可以合并所有文件的内容,并将其命名为:

$output_filename = md5( $module_a_name . $module_b_name ... ) . '.css' ;

if (! file_exists( $output_filename ) {
    //generate merged CSS file
}

// Call back to your template layer to include $output_file in the page header
通过检查服务器上是否已经存在该文件,可以防止重新生成文件,然后只需在模板中输出指向结果文件的样式include。不需要。htaccess需要更改,只需让文件以与其他静态内容相同的方式获得服务


我绝不是一个安全专家,但是只要PHP被配置为将这些文件写入一个不可执行的目录,并且您不使用用户输入来获取源CSS文件,您就应该可以了。更新源CSS文件时,还需要清除缓存的CSS文件。

我认为创建指向静态(但现有)CSS文件的链接会容易得多。如果您处理的Javascript不止几行,那么最好将它们拆分并链接到它们。(动态生成的JS很难调试)但是用户平均在一个页面上会有10个以上的模块,所以我需要在每个页面上为模块添加10个不同的CSS和10个不同的JS脚本。这将是20个脚本,这将减慢我的网站,不是吗?谢谢你的帮助。它们是否会减慢你的网站速度取决于它们有多大……我很少看到CSS文件超过几kb,如果你使用像jQuery这样的Javascript库,你可能会将脚本稍微减少一点。。。在使用经典ASP时,我做了很多年的动态JS,我记得调试和维护是一件非常头疼的事情。(虽然有时我们别无选择)蒂姆,我不同意。WebKit的内置inspector和Firefox的Firebug等现代工具使调试动态JS/CSS相对简单,特别是如果注意在动态文件中输出注释,显示源文件的开始和结束位置。denislexic有一个合理的担忧,那就是包含了太多的文件。每个页面视图20个额外请求可能会使您的web堆栈很快变慢,尤其是当所有请求都通过Apache或IIS等功能齐全的web服务器时。我要澄清,我同意您的看法,页面应该链接到现有的静态文件以节省一些CPU周期,但这些文件可以(而且可能应该是)可以动态生成。