Php 在单个请求中组合CSS

Php 在单个请求中组合CSS,php,css,Php,Css,有人知道如何在组合多个CSS请求时实现类似的功能吗?也许我不知道,但是当你列出一些字体时,网站会生成(可能是动态的)CSS,比如567568569.CSSlo加载字体文件。我认为它是动态的,因为如果使用其他组合(在本例中是字体ID),它会发生变化 实施可分为三个步骤。首先,定义一个控件包装所有参考JS文件 其次,在呈现该控件的过程中,对字符串的所有文件路径使用任何类型的算法(例如编码/加密),并使用src生成脚本标记,该src指向某个处理程序,该处理程序生成为querystring e、 g.I

有人知道如何在组合多个CSS请求时实现类似的功能吗?也许我不知道,但是当你列出一些字体时,网站会生成(可能是动态的)CSS,比如
567568569.CSS
lo加载字体文件。我认为它是动态的,因为如果使用其他组合(在本例中是字体ID),它会发生变化

实施可分为三个步骤。首先,定义一个控件包装所有参考JS文件

其次,在呈现该控件的过程中,对字符串的所有文件路径使用任何类型的算法(例如编码/加密),并使用src生成脚本标记,该src指向某个处理程序,该处理程序生成为querystring

e、 g.Image我们有两个文件:a.js和b.js,我们有一个控件包装它们并生成脚本标记,如:

<script type='text/javascript' src='/js.php?include=encodeab'></script>

第三,当客户端显示html页面并发送对该脚本标记的请求时,某个服务器端处理程序(在上面的例子中是js.php)将该查询字符串解码/解密为包含文件的列表,然后读取它们的内容,合并在一起并输出到流


希望这有帮助。

您可以通过调用动态JS文件来完成以下操作: 从php文件开始,然后在其中:

<?php
    if(isset($_GET['jsOne'])){
        include'example.com/js/one.js'; // points to some .js file 
    } 
    if(isset($_GET['jsTwo'])){
        include'example.com/js/two.js'; // points to some other .js file
    }
    if(isset($_GET['jsThree'])){
        include'example.com/js/three.js'; // points to yet a another .js file
    }
?>

在标题中,您只需要:

<script type="text/javascript" src="js/allScripts.php?jsOne=yes&jsThree=yes"> and so on
等等

希望这有帮助。

使用动态js或css文件时要小心,因为您可能会意外地强迫用户在每个页面上下载它们(而不是使用浏览器缓存)

您可以将多个javascript/php文件包含到一个文件中,然后给它一个javascript类型的头:

header("Content-type: text/javascript");
include('javascript1.php');
include('javascript2.js');
CSS也是如此

资源:

您可以使用以下内容:

<?php
  header('Content-Type: text/css');

  if (isset($_GET['files']))
  {
    $files = explode(',', $_GET['files']);
    foreach ($files as $file)
    {
      # BEWARE!
      # What happens if the file is ../../../../../../../../etc/passwd?
      $file = str_replace('..', '', ltrim($file, '/'));
      include($file);
    }
  }
?>
style1.css

p { border: 1px solid red; }
h1 { color: red; }
style2.css

p { border: 1px solid red; }
h1 { color: red; }
这是一个简单的示例,您可以轻松地扩展它以允许使用javascript文件。另一个很好的优化方法是根据.css文件的mtime设置上次修改的头文件(使用
stat()
)。。。但总体思路应该是明确的

当心,老实说,我不确定$\u GET['files']的转义/解析是否足够。。。请研究此主题以确定,这可能是一个非常危险的安全问题:-)


希望这足以让您走上正确的方向。

我使用了Smoker描述的技术,但我不喜欢每次都调用PHP脚本。在Apache上,可以设置以下重写规则(在.htaccess中):

假设有一个请求进入/css/cache/file1.css-file2.css,Apache将测试它是否存在。如果不存在,请求将转发到csscacher.php脚本,文件名作为“files”参数的值传递。php将加载并合并多个文件,将结果发送到浏览器,还将结果写入/css/cache/file1.css-file2.css。所有后续请求都将作为静态文件


要清除缓存,只需删除/css/cache文件夹中的所有内容。当请求传入时,csscacher.php将从源文件重新创建它们。更多细节。

您也可以使用

@导入url('reset.css')


在主css页面的顶部,可以动态地导入其他css文件。

查看。它为组合和压缩JavaScript或CSS文件提供了一个很好的解决方案。这是一个PHP库,您可以使用脚本在Web服务器上设置它,该脚本获取JS或CSS文件列表并输出连接版本。它还会缓存结果。

谢谢您的快速回答。但是,在这种情况下,我想实现类似于或的目标。我不知道如何通过使用上面描述的技术和.htaccess文件中的规则来实现这一点。我不是php程序员,所以可能无法向您提供任何可重用的代码。你想要的看起来更容易。您有三个js文件:script1.js、script2.js和script3.js,然后以逗号分隔的字符串形式生成链接。当接收到请求时,您只需要将传入的querystring拆分为一个数组,这会产生其他不理想的后果(性能、延迟)。