2009-09-18 115 views
13

我想在PHP中打包一個css文件...因此,我爲css文件編寫了頭文件,併爲其添加了php擴展,因此... css.php。問題是,如果該頁面已被用作包含...或者這個新標題是否與包含在該頁面中的框架衝突?包括:css文件擴展名爲php?

+0

我可能會要求您要使用這個'什麼css.php'文件來服務?某種形式的數據庫生成或什麼? – gnarf 2009-09-19 01:00:07

+0

你能顯示一些代碼嗎?至於情況是什麼,我有點失落。 – strager 2009-09-19 01:07:29

回答

18

gnarf釘了它。

我做的:

<link rel="stylesheet" type="text/css" media="screen" href="<? echo TMPL ?>css/name-of-file.css.php"> 

,然後在.css.php文件的頂部:

<? 
header('Content-Type: text/css'); 
// print out your php-driven css... 
?> 
+2

你也可以使用'header(「Content-type:text/css; charset:UTF-8」);' – Omar 2012-04-18 23:27:29

+0

這是否適用於IE7和8之類的舊瀏覽器? – 2015-08-20 05:04:13

+0

確保標題打印在文件的最頂端。如果你有(像我一樣)頂部的空行,它可能無法在某個地方工作! – MilanG 2016-06-03 08:20:23

0

如果includer腳本不發送任何輸出,它將起作用,否則您將有一個「標題已發送」錯誤。

在includer中使用ob_start()可以避免這種情況,並使所有的工作。

html框架與php包含無關,所以在這種情況下根本沒有衝突。

15

如果您有一個名爲css.php的文件,請確保第一行設置正確的內容類型標題。如果還沒有,您可能還想將會話設置內容(如果有的話)拆分爲bootstrap.php。從DATABSE加載一些樣式信息的一個簡單的例子:

<?php 
    header("Content-Type: text/css"); 
    include('bootstrap.php'); 
    // fetch some information to print out our styles 
    $result = mysql_query("SELECT * FROM site_styles"); 
    while ($row = mysql_fetch_assoc($result)) { 
    echo $row["selector"]." {\n".$row["css"]."\n}\n"; 
    } 
?> 

從其他PHP文件,只輸出標籤包括css.php,你希望使用PHP include()功能此任務!

<link rel="stylesheet" type="text/css" href="css.php"/> 

雖然因爲大多數瀏覽器會緩存您的css文件很積極,你可能會發現,動態改變該文件的內容並沒有做太多好。你可以強制通過添加GET參數到鏈接的href的更新:

<link rel="stylesheet" type="text/css" href="css.php?<?php echo $cssversion ?>"/> 

雖然這是怎麼回事,每次完全刷新你的CSS文件中的參數變化。出於這個原因,通常更好的做法是提供靜態css文件。如果你有一些需要從配置參數等加載的樣式,這些樣式不會經常改變,那麼第一個例子應該對你很好。

+1

糟透了,看到你的回答有鯊魚。 – emc 2013-04-15 17:38:26

6

HTML文件:
<link rel="stylesheet" type="text/css" href="css.php"/>

css.php文件:
<?php
header("Content-type: text/css; charset=utf-8");
//your php + css code goes here
?>

如果在你的CSS.php文件第一行代碼是不是
header("Content-type: text/css; charset=utf-8");它不會工作