如何清除php变量中的值并重用该变量

时间:2018-03-20 16:20:43

标签: php phpmailer sendmail

此代码通过邮件表向所有员工发送电子邮件,其中列号为Id,Name,Email。现在举个例子, 如果有3名员工,则第一名员工将所有3个工资单作为附件获得,2名员工获得第2和第3个工资单,第3名员工仅获得第3个工资单。我认为存储的电子邮件值正在创建问题,所以我想清除存储在$ sendto,$ pdf和$ filename变量中的数据。我试过apc_delete(),unset(),还有$ var =""但没有一个工作。

这是代码:

    <?php
    //require 'mailerClass/PHPMailerAutoload.php';
    require_once '../connect.php';
    use PHPMailer\PHPMailer\PHPMailer;
    use PHPMailer\PHPMailer\Exception;

    //Load composer's autoloader
    require 'vendor/autoload.php';

    $mail = new PHPMailer;
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    $cin =1;
    $sql = "SELECT * FROM mail";
    $query = mysqli_query($con, $sql);
    $count = mysqli_num_rows($query);
    try {
    while($row = mysqli_fetch_array($query, MYSQL_ASSOC)){
    //
        $sendto = $row['Email'];
        //attachment pdf files path array
        $path = "C:/Reports/";
        $file = $row['Name'];
        $extension = ".pdf";
        $filename = $file.$extension;
        $pdf = $path. $file. $extension ;



        //Server settings
        $mail->SMTPDebug = 2;                                 // Enable verbose debug output
        //$mail->isSMTP();                                      // Set mailer to use SMTP
        $mail->Host = 'smtp.mail.yahoo.com';  // Specify main and backup SMTP servers
        $mail->SMTPAuth = true;                               // Enable SMTP authentication
        $mail->Username = 'username@yahoo.com';                 // SMTP username
        $mail->Password = '@password';                           // SMTP password
        $mail->SMTPSecure = 'ssl';                            // Enable TLS encryption, `ssl` also accepted
        $mail->Port = 465;      //587;                                    // TCP port to connect to

        //Recipients
        $mail->setFrom('mediakraft64@yahoo.com');
        $mail->addAddress($sendto);     // Add a recipient

        $mail->addReplyTo('mediakraft64@yahoo.com');
        $mail->addCC('mediakraft64@yahoo.com');
        //$mail->addBCC('bcc@example.com');

        //Content
        $mail->isHTML(true);                  // Set email format to HTML
        $mail->Subject = 'Payslip';
        $mail->Body    = 'Payslip from Mediakraft Check file attachment';
        $mail->AltBody = 'Payslip from Mediakraft Check file attachment';

    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => true
        )
    );



        $mail->addAttachment($pdf, $filename);      //= $_POST['mypdf'];

        $mail->send();
        echo 'Message has been sent';

    //unset($sendto);
    $sendto = " ";
    $pdf = " ";
    $mail->clearAttachments();
    sleep(5);

    } //end while

    echo"<script>alert('Email Sent... Successfully'); document.close();</script>";

    } catch (Exception $e) {
        echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
    }
    ?>

任何帮助??

由于

2 个答案:

答案 0 :(得分:-1)

如果要重用该变量,只需为其重新分配一个新值:

$a = 1;
$a = "a string";
$a = new MyClass();

PHP的引擎会自动删除旧值(如果需要)。你不必担心。

答案 1 :(得分:-1)

unset将删除变量和内容。调用$a后引用unset($a)将引发错误。此外,您必须考虑要取消设置的变量的范围,以及是通过引用还是通过函数内部的副本传递它。

要仅删除内容,没有特定的内置PHP指令。如果您必须发出变量不再保留有效数据的信号,或者释放当前使用的内存,请为其分配nullfalse

没有“清除变量”之类的东西。您可以使用empty()查看 PHP是否认为变量为空。