0

実行すると出力が得られる関数を含むphpスクリプトがあります。ob_start および ob_get_clean 関数を使用して、その出力を出力バッファーとして使用し、HTML を含む出力をレポートとして電子メールで送信しています。問題は、電子メールが出力の最初の数行ではなく、何度も試してみましたが、毎回最初の数行が欠落していることです。

これを解決するには?

<?php
function abc{
echo 'Server Time: '.date('l jS \of F Y h:i:s A').'<br>';
echo "Lorem ipsum dolor sit amet, consectetur adipiscing elit. <br>
Vestibulum semper purus ut felis interdum at tempus turpis imperdiet. <br> 
Donec varius accumsan magna nec blandit. <br>
Donec a pellentesque ligula. Curabitur accumsan mauris non velit vehicula sodales. <br>
Phasellus vestibulum vestibulum nunc ut lobortis. Ut eu rutrum orci. Phasellus tempor eleifend congue. <br>
In mollis porta arcu. Integer congue fringilla lorem.";
}

function mailasreport($message) {
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
mail('example@hotmail.com', $subject, $message, $headers);
}
ob_start();
abc();
$report = ob_get_clean();
mailasreport($report);
?>

電子メール出力:

Donec varius accumsan magna nec blandit.
Donec a pellentesque ligula. Curabitur accumsan mauris non velit vehicula sodales. 
Phasellus vestibulum vestibulum nunc ut lobortis. Ut eu rutrum orci. Phasellus tempor eleifend congue. 
In mollis porta arcu. Integer congue fringilla lorem.

元のコードは非常に長く、これはその小さなクローンです!

4

1 に答える 1

1

あなたob_get_contents();も使っていますか?

ob_start();
//do your stuff
...
$buffer = ob_get_contents();
ob_end_clean();

編集:

テスト スクリプトの例、これをテストして確認してください。常にユーザー入力を検証する必要があることに注意してください。そうしないと、将来スパム ホストになる可能性があります。この例には検証がありません。

<?php
function makeMail(){
    return '
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>

<body>
<h1>Time: '.date("l jS \of F Y h:i:s A").'</h1>
<ol>
    <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</li>
    <li>Vestibulum semper purus ut felis interdum at tempus turpis imperdiet.</li>
    <li>Donec varius accumsan magna nec blandit.</li>
</ol>
<h3 style="color:red;">
            Donec a pellentesque ligula. Curabitur accumsan mauris non velit vehicula sodales.<br />
            Phasellus vestibulum vestibulum nunc ut lobortis. Ut eu rutrum orci. Phasellus tempor eleifend congue.<br />
            In mollis porta arcu. Integer congue fringilla lorem.</h3>
<p>yada ;p</p>
</body>
</html>';
}

/**
 * Send email
 */
function sendMail($to, $from, $subject, $content){
    $headers ='MIME-Version: 1.0'."\r\n";
    $headers.='Content-type: text/html; charset=utf8'."\r\n";
    $headers.='From:<'.$from.'>'."\r\n";
    $headers.="X-Mailer: PHP"."\r\n";
    return @mail($to, $subject, $content, $headers) ? true : false;
}

ob_start();
//do your stuff
echo makeMail();
$email_contents = ob_get_contents();
ob_end_clean();

if(sendMail('to@example.com', 'from@examlpe.com', 'Email Subject', $email_contents)){
    //sent
    echo 'sent';
}else{
    //fail
    echo 'fail';
}
?>

それが役に立てば幸い

于 2013-05-11T14:52:33.107 に答える