【问题标题】:how to clear a value from a php variable and reuse the variable如何从 php 变量中清除一个值并重用该变量
【发布时间】:2018-08-29 13:39:10
【问题描述】:

此代码从邮件表中向所有员工发送电子邮件,其中列是 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;
    }
    ?>

有什么帮助吗??

谢谢

【问题讨论】:

  • 这与取消设置变量无关,这是因为循环的每次迭代只是将另一个收件人添加到同一个 $mail 实例中。您需要在发送每封电子邮件后清除收件人,就像清除附件一样。
  • 是 $mail->clearaddAddress();
  • 感谢@iainn,已解决。

标签: php phpmailer sendmail


【解决方案1】:

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

要仅删除内容,没有特定的内置 PHP 指令。如果您必须发出信号表明该变量不再保存有效数据或释放它当前使用的内存,只需将 nullfalse 分配给它。

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

【讨论】:

  • 问题是 .. 一个变量从 sql 表中获取电子邮件 ID 并发送邮件,然后在 while 循环的下一次迭代中,它保留第一个电子邮件 ID 并获取第二个电子邮件 ID 和将下一封邮件发送到两个 ID .. :(
【解决方案2】:

如果你想重用这个变量,只需给它重新分配一个新值:

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

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

【讨论】:

  • 复用部分是次要的,主要是清除变量中存储的数据
猜你喜欢
  • 2012-05-31
  • 1970-01-01
  • 2013-08-13
  • 1970-01-01
  • 2021-06-03
  • 2014-08-04
  • 2021-08-22
  • 2012-07-08
相关资源
最近更新 更多