无法正确记录脚本时间

时间:2014-06-10 20:05:38

标签: php imap swiftmailer microtime

我有一个脚本有时需要超过40秒才能运行。但微缩时间的东西回归不到1秒钟。

第一个问题是为什么这么做?第二个问题是为什么microtime没有正确地返回时间?

  <?
  $inicio = microtime(true);
  session_start();
  header('Content-Type: text/html; charset=utf-8');
  include 'coneccion-base-mails.php';
  include 'coneccion.php';
  include 'funciones.php';



  $id = $_POST["id"];

  //recuperamos los datos del envio
  $R = $mysqli->query("SELECT * FROM envios WHERE id=".$id."")->fetch_array();

  $remitente = $R["remitente"];
  $lista = $R["lista"];
  $asunto = $R["asunto"];
  $cuerpo = $R["cuerpo"];
  $sustituto = $R["sustituto"];

  $contactos = array();



  //ahora creamos cargamos la lista
  if($lista=="Todos"){
      $result = $mysqli->query("SELECT * FROM listas WHERE usuario='".$_SESSION["usuario"]."'");
      while($R = $result->fetch_array()){
          $dato = array($R["nombre"],$R["apellido"],$R["mail"]);
          array_push($contactos,$dato);
      }
  }
  else{
      $result = $mysqli->query("SELECT * FROM segmentos WHERE titulo='".$lista."' and usuario='".$_SESSION["usuario"]."'");
      $R = $result->fetch_array();
      $idsegmento = $R["id"];
      $result = $mysqli->query("SELECT * FROM listasegmentos WHERE idsegmento=".$idsegmento."");
      while($R = $result->fetch_array()){
          $dato = array(nombreContacto($R["idcontacto"]),apellidoContacto($R["idcontacto"]),mailContacto($R["idcontacto"]));
          array_push($contactos,$dato);
      }
  }

  //ya tenemos los contactos,

  //ahora los recorremos uno a uno, fijandonos si ya fue enviado ese mail, si fue enviado vamos al siguiente, sino lo mandamos y cortamos.
  $total = count($contactos);
  $mm = 0;

  if( mailsEnviadosEstaHora() < $limiteMailsPorHora){
      foreach($contactos as $contacto){
          $nombre = $contacto[0];
          $apellido = $contacto[1];
          $mail = $contacto[2];
          if(mailEnviado($mail)=="no"){
              if(strpos($mail,";")===false){

                  enviarMail($nombre." ".$apellido." <".$mail.">",$mail,$nombre);

              }
              else{
                  $mails = explode(";",$mail);
                  $comp = "";
                  foreach($mails as $mailss){
                      if($comp == ""){
                          $comp = $nombre." ".$apellido." <".$mailss.">";
                      }
                      else{
                          $comp .= ",".$nombre." ".$apellido." <".$mailss.">";
                      }
                  }
                  enviarMail($comp,$mail,$nombre);
              }
              break;
          }
          else{
              $mm++;
          }
      }


      if($mm == $total){
          $mysqli->query("UPDATE envios SET estado='enviada' WHERE id=".$id."");
          echo "actualizar";
      }
  }
  else{
      //se llego al limite de mails por hora
      echo "limite";
  }






  function marcarEnviado($mail){
      global $mysqli;
      global $id;
      global $remitente;
      global $lista;
      global $asunto;
      global $cuerpo;
      global $mm;
      global $total;
      global $inicio;


      $fecha = date("Y")."-".date("m")."-".date("d");

      $mysqli->query("INSERT INTO procesoenvio (idenvio,destinatario,estado,fecha,hora,solohora) VALUES (".$id.",'".$mail."','enviado','".$fecha."','".date('H:i:s')."','".date('H')."')");

      $caca = $mm+1;
      echo $caca." / ".$total;
      $actual = microtime(true);
  $totalsss= $actual- $inicio;
  echo 'Tiempo : '.$totalsss.' segundos<br>';

  }

  function enviarMail($para,$mail,$nombre){
      global $mysqli;
      global $id;
      global $remitente;
      global $lista;
      global $asunto;
      global $cuerpo;
      global $sustituto;



      if($nombre==''){
          $nombre = $sustituto;
      }


      //from
      $from = array();
      $_datos = explode("<",$remitente);
      $_nombre = trim($_datos[0]);
      $_mail = $_datos[1];
      $_mail = trim(str_replace(">","",$_mail));
      $from[$_mail] = $_nombre;

      $cuentas = explode("---",$_SESSION['correo']);

      foreach($cuentas as $cuenta){

          $correo = explode("|||",$cuenta);
          $username = $correo[0];
          $password = $correo[1];
          if($username == $_mail){
              break;
          }
      }



      //

      require_once 'swiftmailer-master/lib/swift_required.php';

      // Create the mail transport configuration
      $transport = Swift_SmtpTransport::newInstance("mail.dxxxxxxxxxxx.com",25);
      $transport->setUsername($username);
      $transport->setPassword($password);

      // Create the message
      $message = Swift_Message::newInstance();

      $destinatarios = explode(",",$para);
      $destin = array();
      foreach($destinatarios as $destinatario){
          $s = strpos($destinatario,"<");
          if($s===false){
              array_push($destin,$destinatario);
          }
          else{
              $_datos = explode("<",$destinatario);
              $_nombre = trim($_datos[0]);
              $_mail = $_datos[1];
              $_mail = trim(str_replace(">","",$_mail));
              $destin[$_mail] = $_nombre;
          }

      }


      $message->setTo($destin);
      $message->setSubject($asunto);

      $message->setFrom($from);

      // adjuntos!!!
      $ruta = '../../panel/envios/adjuntos/' . $id . '/'; // Relative to the root

      if(file_exists($ruta)){ // Abrir archivos
          $n = 0;

          $archivos = array();

          foreach (new DirectoryIterator($ruta) as $file) {
              if($file->isDot()) continue;
              array_push($archivos,$file->getFilename());
          }
          sort($archivos);
          foreach($archivos as $archivo){

              $message->attach(Swift_Attachment::fromPath('http://xxxxxxxxxxxxxxxxxxxx.com'.str_replace('../../','/',$ruta).str_replace(' ','-',$archivo)));
              $n+=1;
              //break;
          }

          if($n==0){
              //no hay fotos en la carpeta 

          }

      }
      $cuerpoPersonalizado = str_replace('[[[Nombre]]]',$nombre,$cuerpo);
      $message->setBody($cuerpoPersonalizado,'text/html');
      $msg = $message->toString();
      $msg = str_replace('http://xxxxxxxxxxxx.com/img.php?i','#',$msg);
      $verificacion = base64_encode($id.'|||'.$mail);
      $cuerpoPersonalizado = str_replace('numeroidentificacion',$verificacion,$cuerpoPersonalizado);
      $message->setBody($cuerpoPersonalizado,'text/html');
      // Send the email
      $mailer = Swift_Mailer::newInstance($transport);

      //$mailer->send($message) or die($msg);

      $mailer->send($message);



      marcarEnviado($mail);




      $hostname = '{localhost:143}Sent Items';
      $conn = imap_open($hostname,$username,$password) or die('No se pudo conectar con: usuario: '.$username.' y clave: '.$password.' ' . imap_last_error());   

      imap_append($conn, '{localhost:143}Sent Items', $msg, "\\Seen") or die("error");


  }





  ?>

1 个答案:

答案 0 :(得分:2)

作为您问题的重要内容,请确保您清理数据 - 那些$ _POSTs可以用于SQL注入: Do htmlspecialchars and mysql_real_escape_string keep my PHP code safe from injection?

考虑使用PDO prepared statements。它更安全(有助于针对SQL注入准备语句)并使事务变得容易(对于多个重复查询)。

至于你的回答,我认为你误解了microtime()返回的内容。我已经包含了一个链接,可以按照您期望的方式格式化微秒数。

php microtime() format value