Foreach功能使503服务不可用

时间:2017-09-14 22:17:29

标签: php foreach http-status-code-503

现在是凌晨1点,我正在努力工作3-4个小时,看看我的剧本有什么问题......

我的数据库有大约400封电子邮件。我将$ChunkSize设置为循环的计数器,并计算下一个要处理的块。

我已经设置了一些echo()来调试

echo "This is the " . $GLOBALS["ChunkSize"] . " chunk. <br>";

它应输出当时处理的块。 如果我禁用mail(),那么我不会获得503服务不可用,但每个echo()同时显示,而不是按处理顺序显示。

我还发现有些电子邮件到了,但不是每个人都有。此外,如果发送了一些电子邮件,这意味着foreach()应该已经处理了至少一个块,这意味着它应该至少显示一个echo()

我已设置break 1;,因此每次突破foreach()时,它都会显示echo(),其中foreach()处理的块号由$connection = mysql_connect($hostname, $username, $password); mysql_select_db($dbname, $connection); $result = mysql_query("SHOW COLUMNS FROM `Emails`"); while($row = mysql_fetch_array($result)){ $Addresses[] = $row['Field'];} $Subject = "Test"; $Message = " Test "; $Headers = array( EMPTY FOR SECURITY REASONS ); $Headers = implode( "\r\n" , $Headers ); $ChunkAddresses = 50; $EmailChunkArray = array_chunk($Addresses, $ChunkAddresses); $ArraySize = count ($EmailChunkArray); $ChunkSize = 0; ChunkLoop: { $EmailChunkArrayLoop = $GLOBALS["EmailChunkArray"]; foreach ($EmailChunkArrayLoop[$GLOBALS["ChunkSize"]] as $ToChunkLoop) { if ($GLOBALS["ChunkSize"] <= $GLOBALS["ArraySize"]) { mail($ToChunkLoop,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]); echo "This is the " . $GLOBALS["ChunkSize"] . " chunk. <br>"; } else if ($GLOBALS["ChunkSize"] == $GLOBALS["ArraySize"]){ exit();} $GLOBALS["ChunkSize"]++; break 1;} } if ($GLOBALS["ChunkSize"] != $GLOBALS["ArraySize"]){ echo "Test. <br>"; goto ChunkLoop; } else { echo "Finished! <br>";} 处理,但事实并非如此。

我做错了什么?

WORKDIR ./myPythonModule
RUN pip install .

1 个答案:

答案 0 :(得分:2)

创建只执行一项操作的脚本 - 发送邮件。

sendMail.php

<?php

// Get recipient from the argv array
$recipient = $_SERVER['argv'][1];

// Mail args
$subject = 'HELLOOOOOOO';
$message = 'BLablabla';
$headers = [...]; // optional or not

// Send it
mail($recipient, $subject, $message, $headers);

在您的代码内部:

mail($ToChunkLoop,$GLOBALS["Subject"],$GLOBALS["Message"],$GLOBALS["Headers"]);

替换为:

$recipient = escapeshellarg($ToChunkLoop);
exec("php /path/to/sendMail.php ".$recipient." > /dev/null &"); // that will call mail script and will not wait when execution will end

随意调整我的代码示例

附:此解决方案适用于您不想支付正常批量邮件发送,邮件订阅或专用,vps服务以及只有小型虚拟主机的情况。 (:

P.S ..它不是一个出色的解决方案,但完成了问题作者提供的要求

相关问题