PHP在浏览器中执行超时和回显输出在同一行中
我有一个向我的客户发送电子邮件的脚本PHP在浏览器中执行超时和回显输出在同一行中,php,Php,我有一个向我的客户发送电子邮件的脚本 <? set_time_limit(0); error_reporting(E_ALL); $_SESSION['start_time'] = time(); $strSubject = strip_tags($_POST["txtSubject"]); $strSubject = utf8_encode($strSubject); $strMessa
<?
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." ." ";
}
else
{
echo "</br> $vasia Cannot send mail. ";
}
$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);
}
?>
问题
PHP不在浏览器中执行,而是在服务器上执行,然后将其输出发送到浏览器。一旦服务器发送脚本的输出,它就不再有任何控制权。因此,您不能用另一个回声“替换”一个回声。您需要Javascript来完成类似的操作
您的PHP没有超时。您已经设置了
时间限制(0)代码>位于顶部,删除时间限制。如果有什么东西超时了,那不是PHP。如果你想隐藏前一行等等,我会回到Javascript。PHP在服务器上呈现。检查php.ini并查看超时,有时无法覆盖这些设置。您要查找的设置是
max_execution_time
祝你好运