在ob_endflush()之前和header(location:)之前需要样式表,如何?

时间:2014-01-21 04:23:45

标签: php css header styles

我的页面具有以下结构:

<?php
  session_start();
  ob_start();
?>

HTML HEADER
links to stylesheets global.css and mail.css

<?php
  function email(){
     /* using the stylesheets global.css and mail.css */
     $text = '<div class="test">
                 <p id="par">...
                    <span id="write" class="text">...</span>
                 </p>
              </div>';

     return $text;
  }
?>


/* some text and html stuff */

<?php
  if(isset(...)){
    /* php form validation */

    /* after validating I send an email to the user where I call
       the function email() which use the stylesheets. */
    $mail_text = 'Dear .....';
    $mail_text .= email();

    $mail_headers = "From: test@test.com\r\n".
                     'X-Mailer: PHP/' . phpversion().
                     'MIME-Version: 1.0' . "\r\n".
                     'Content-type: text/html; charset=utf-8' . "\r\n";

     if(mail(..., ..., $mail_text, $mail_headers)){
         header('location: newlocation.php');
     }
?>

/* HTML FORMS and text and .... */

<?php
   ob_end_flush();
?>

电子邮件与来自email()函数的文本一起发送,但没有格式化导致CSS仅在页面底部的ob_end_flush()之后“打印出来”。

我怎么能解决这个问题? email()中有很多类和样式,所以每次<div style="...">等都写不是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

您对输出缓冲感到困惑。您在页面开头打印的html / css不会在任何地方被捕获,也不会成为$mail_text的一部分。仅仅因为你是usign输出缓冲不会使该缓冲区神奇地出现在变量中。您至少需要$mail_text .= ob_get_clean()或其他东西来提取缓冲区的内容并将其放入变量中。