J'ai un script qui envoie des e-mails à mes clients

<?  
    set_time_limit(0);
    error_reporting(E_ALL);

    $_SESSION['start_time'] = time();
            $strSubject = strip_tags($_POST["txtSubject"]);
            $strSubject = utf8_encode($strSubject);
            $strMessage = $_POST["txtDescription"];
            $txtFormName = $_POST["txtFormName"];
            $txtFormName = utf8_encode($txtFormName);
            $txtFormEmail = $_POST["txtFormEmail"];
            $mailSended = 0;
                $count = 0;
                $Ccount = 0;
                foreach($_FILES['fileAttach']['error'] as $status){
                    if($status === UPLOAD_ERR_OK) {
                    $fname[] = $_FILES['fileAttach']['name'][$Ccount];
                    $tmp_path[] = $_FILES['fileAttach']['tmp_name'][$Ccount];
                    $ftype[] =  $_FILES['fileAttach']['type'][$Ccount];
                        $count++;
                    }
                    $Ccount++;
                }
            //if not empty post txtTo
        if(!empty($_POST['txtTo'])){
            $recipients = str_replace(';',',', $_POST['txtTo']);
            $recipients = explode(',', $recipients);

            foreach ($recipients as $ReCEmail)  {
            ob_start();   
                SendEmails($ReCEmail,$strSubject,$strMessage,$txtFormName,$txtFormEmail,$fname,$ftype,$tmp_path);
            ob_end_flush();
            } 
        }    //if empty post txtTo  takes emails from file
        else 
        {
            $handle = fopen(getcwd() . "/emails.txt", "r");
            if ($handle) {
                while (($line = fgets($handle)) !== false) {
                ob_start();
                    SendEmails($line,$strSubject,$strMessage,$txtFormName,$txtFormEmail,$fname,$ftype,$tmp_path);
                ob_end_flush(); 
                }
                fclose($handle);
            } else {
                echo "error opening the file.";
            } 
        }

        function SendEmails($vasia,$strSubject,$strMessage,$txtFormName,$txtFormEmail,$fname,$ftypes,$tmp_path) {

            $strTo = $vasia; 
            $txtFormName = utf8_decode($txtFormName);
            $strSid = md5(uniqid(time(),true)).base_convert(time() * 2, 10, 36);  
            $strHeader = "X-Priority: 0 (Highest)" .PHP_EOL; 
            $strHeader .= "Importance: High" .PHP_EOL;
            $strHeader .= "From: ".$txtFormName." <".strip_tags($txtFormEmail).">" .PHP_EOL ."Reply-To: ".strip_tags($txtFormEmail);
            $strHeader .= "MIME-Version: 1.00" .PHP_EOL;
            if(count($fname) == 0) 
            {
                $strHeader .= "Content-type:text; charset=\"UTF-8\"" .PHP_EOL;
                $strHeader .= "Content-Transfer-Encoding: 7bit"  .PHP_EOL;
                $strHeader .= $strMessage .PHP_EOL;
            } else {
                $strHeader .= "Content-Type: multipart/mixed; boundary=\"".$strSid."\"".PHP_EOL;
                $strMSG = "This is a multi-part message in MIME format.".PHP_EOL .PHP_EOL;
                $strMSG .= "---".$strSid.PHP_EOL;
                $strMSG .= "Content-type:text/html; charset=\"UTF-8\"".PHP_EOL;
                $strMSG .= "Content-Transfer-Encoding: 8bit" .PHP_EOL .PHP_EOL;
                $strMSG .= $strMessage .PHP_EOL;
                    //*** Attachment ***//  
                    for($x=0;$x<count($fname);$x++)  
                    {  
                        if($fname[$x] != "")  
                        {  
                            $strContent = chunk_split(base64_encode(file_get_contents($tmp_path[$x]))); 
                            $strMSG .= "--".$strSid.PHP_EOL;                    
                            $strMSG .= "Content-Type: ".$ftypes[$x]."; name=\"".$fname[$x]."\"".PHP_EOL;
                            $strMSG .= "Content-Transfer-Encoding: base64".PHP_EOL;
                            $strMSG .= "Content-Disposition: attachment; filename=\"".$fname[$x]."\"".PHP_EOL.PHP_EOL;
                            $strMSG .= $strContent.PHP_EOL;
                        }
                    }
                $strMSG .= "--".$strSid."--";

            }

            // sleep(3) 1 email in 3 sec, 20 emails in 1 min, 1200 email in 1 hour
            // sleep(4) 1 email in 4 sec, 15 emails in 1 min, 900 email in 1 hour
            sleep(4); 
            $flgSend = mail($strTo,utf8_decode($strSubject),$strMSG,$strHeader);  
            global $mailSended,$diff;
            $mailSended++;
                if($flgSend)  
                {  
                    echo "</br> $vasia Mail send completed." ."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  
                }  
                else  
                {  
                    echo "</br> $vasia Cannot send mail. &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";  
                }
                $end_time = time();
                $diff = $end_time - $_SESSION['start_time'];
                echo "Sent " . $mailSended . " emails in " .secondsToTime($diff);   
                ob_flush();
        } 

    function secondsToTime($s)
    {
        $h = floor($s / 3600);
        $s -= $h * 3600;
        $m = floor($s / 60);
        $s -= $m * 60;
        return $h.':'.sprintf('%02d', $m).':'.sprintf('%02d', $s);
    }

    ?> 

Des questions

  1. Comment afficher dans le navigateur la sortie d'écho dans la même ligne en effaçant la dernière sortie d'écho?
  2. Comment éviter les délais d'expiration du navigateur jusqu'à ce que le script fonctionne? Je veux voir en temps réel la sortie d'écho !!!
php
0
Dmitrij Holkin 5 janv. 2016 à 16:10

2 réponses

Meilleure réponse

PHP ne s'exécute pas dans le navigateur, il s'exécute sur le serveur puis sa sortie est envoyée au navigateur. Une fois que le serveur a envoyé la sortie du script, il n'a plus aucun contrôle sur celui-ci. Par conséquent, vous ne pouvez pas "remplacer" un écho par un autre. Vous avez besoin de Javascript pour faire quelque chose comme ça.

Votre PHP n'arrive pas à expirer. Vous avez set_time_limit(0); en haut, ce qui supprime la limite de temps. Si quelque chose arrive à expiration, ce n'est pas PHP.

0
I wrestled a bear once. 5 janv. 2016 à 13:16

Je reviendrais à Javascript si vous voulez masquer la ligne précédente, etc. rendu php sur le serveur. Vérifiez votre php.ini et voyez votre délai d'expiration. Parfois, vous ne pouvez pas remplacer ces paramètres. Le cadre que vous recherchez est

max_execution_time

Bonne chance.

0
tiny sunlight 5 janv. 2016 à 15:12