在css文件中运行php

时间:2016-01-06 14:30:33

标签: php css

我希望在css文件中运行PHP。原因是我想根据网站是在开发还是生产中动态设置背景图像的URL。即

<?php Header ("Content-type: text/css; charset=utf-8"); 

$baseUrl = $this->basePath();

if (defined('RUNNING_FROM_ROOT'))
{
    $baseUrl .= '/public';
}

?>

.readersSlidersOne {

    background: url("<?php echo $baseUrl ?>/Images/backGroundImages/side_wallet.png") scroll 0 0 transparent ;
}

上面的 if子句基本上决定了是应该使用完整的BASE URL还是仅使用/ public

我从this answer知道解决方案是创建一个带有php结尾的css文件,然后将下面的代码放在文件的顶部:

  

标题(“内容类型:text / css; charset = utf-8”);

我确实试过这个,确实用PHP标签创建了一个CSS文件(css.php)。

然而,一旦我在文件中放置了实际的PHP代码,它就会停止工作。

$baseUrl = $this->basePath();

5 个答案:

答案 0 :(得分:4)

在这种情况下我通常做的是,我在所需页面的顶部添加特定的css并动态更改值。这是因为css是特定于页面的

<?php
$path = 'http://www.example.com/image.jpg';
?>
<style>
.className{
 background: url(<?php echo $path; ?>);
}
</style>

或者如果您想将它放在标题包含文件中,基本上在所有文件的一个位置,添加if else语句并在页面顶部添加$ page变量

<?php 
// define this before including the file contaiting $path
$page = 'index';   ?>
<?php
if($page == 'index'){
  $path = 'http://www.example.com/image01.jpg';
}elseif($page == 'contactus'){
  $path = 'http://www.example.com/image02.jpg';
}
?>

答案 1 :(得分:2)

CSS文件应该是静态的和可缓存的。您不应该通过PHP动态生成CSS文件。

  • 如果需要在生产环境和登台环境之间进行 一次 更改,则只需执行 一次 在部署阶段(上传到相应的环境时)。使用某种构建/部署脚本,CSS预处理器或其他最适合的东西。没有必要通过PHP在每个请求上执行
  • 如果您想根据动态值自定义网页外观,请在HTML页面中放置<style>部分,然后通过PHP生成(或应用style=".."属性受影响的元素直接);你可以通过PHP动态地操作它。

答案 2 :(得分:1)

除非此文件包含在类定义中的某处,否则$this->不在上下文中。您将不得不想出另一种方法来获得正确的路径。

使用:

$Livedomain = "mysite.com";
$Devdomain = "localhost/mydomain";
$baseUrl = strpos($Livedomain, $_SERVER['PHP_SELF']) === false ? $Devdomain : $Livedomain;

此外,您可以发送缓存标头以防止过多请求并快速加载页面..

$seconds_to_cache = (60 * 60 * 24 * 90); // 3 months-ish
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT";
header("Expires: $ts");
header("Pragma: cache");
header("Cache-Control: max-age=$seconds_to_cache");

答案 3 :(得分:0)

你走在正确的轨道上 - 在CSS文件中运行PHP代码,你会创建一个*.php文件并通过它发送一个CSS头,如下所示:

myStyles.php

确保在Header()

之前没有放置PHP代码或空格
<?php Header("Content-type: text/css; charset=utf-8"); ?>
<?php

    $wht = '#ffffff';   
    $blk = '#000000';

    // This line probably isn't working because $this is not defined
    $baseUrl = $this->basePath();

?>

div#id {
    background-color: <?php echo $blk; ?>;
    color: <?php echo $wht; ?>;
    background-image: url('<? echo $baseUrl; ?>/images/myimage.jpg');
}

话虽如此,你是否尝试过像LESS或SASS这样的预处理器,这可以用来做我认为绝大多数你想要完成的事情?

答案 4 :(得分:0)

这只是一个想法....你不容易在html中只注入背景图片吗?例如:

// Somewhere in your html oh Head
<?php
 $image = 'http://www.tld.com/yourImage.jpg';
?>

<div id="myId" style="background-image:<? echo $image; ?>"></div>

然后你不需要在CSS的本质上做任何事情,这将节省你的时间! :)