使用PHP将变量发送到Css


Send variables to Css using PHP

目前我正在用PHP创建完全动态的网站。现在我想通过Index.php 编辑一些CSS属性

在Index.php中,我通过一个会话将边框的颜色发送到css文件。

session_start();
$_SESSION['CssBorder'] = 'red';

在我的Css文件中,我进行了会话

<?php
header('Content-type: text/css');
    $CssBorder = $_SESSION['CssBorder'];
?>

然后在css中使用它,如下所示

.Container{
        border-left:    1px solid <?php echo $CssBorder ?>;

这不起作用,它没有显示颜色。我肯定也做错了什么,因为后面的第一个CSS属性没有被使用,之后的一切看起来都是应该的。

此外,当我用一个普通字符串替换会话时,我知道它是有效的,如下所示。它工作得很完美。

$string = 'red';

为什么它不起作用,我该如何解决这个问题?

非常感谢。

不,您希望能够以这种方式访问外部样式表,对您来说最好的解决方案是

在页眉中,设置style标记,并在页眉之前为$CssBorder指定值。

<head>
<style type="text/css">
h1 {color:red;}
p {color:blue;}
.Container {border-left: 1px solid <?php echo $CssBorder ?>;
</style>
</head>

注意:根据最佳实践,我认为应该将中的类重命名为有意义的类动态边界

所以看起来,

.dynamic-border {border-left: 1px solid <?php echo $CssBorder ?>;

用PHP生成CSS是一种不常见但可行的方法。我认为在某些情况下可能存在竞争条件,特别是因为您明确指出使用$_SESSION是问题所在。

我的意思是,我不确定当请求PHP生成的样式表时,$_SESSION['CssBorder']是否已经刷新,并且可以从其他进程中读取。例如

browser >>>: GET index.php
server  <<<: 200 OK
server  <<<: Set-Cookie: PHPSESSIONID=blah
server  <<<: HTML response body here... until some style.php
browser <<<: GET style.php
browser <<<: Cookie: PHPSESSIONID=blah

在这一点上,$_SESSION['CssBorder']对于处理第二请求的进程可能还不可见。但这只是猜测。

正如@Nikil所说,"我想你的css文件中缺少start_session()了??"我错过了CSS文件中的一个启动会话。

很抱歉,我在问题中出现了这样的错误。我是一个初级PHP程序员,以前从未使用过Session。

我读过并认为您只需要在创建seassion变量的文件中有一个session_start。

谢谢大家,并致以诚挚的歉意。(和我的英语)