目前我正在用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。
谢谢大家,并致以诚挚的歉意。(和我的英语)