我编写了一个PHP脚本来使用APNS推送通知。我添加了一个PHP进度条来监控已推送的用户数。进度条显示在PHP页面中。我还不断更新MySOL数据库以记录号码。这个脚本预计会运行很长时间。运行大约3个小时后,PHP页面(带进度条)停止,但是当我检查数据库时,推送用户的数量仍在增加。这意味着脚本仍然在服务器的内存中运行,但为什么页面显示已停止?
这里有一些代码:
$count = 1;
while($row = mysql_fetch_array( $result )) {
$pushToken = $row['pushToken'];
$result2 = mysql_query("SELECT COUNT(*) FROM deactivated_pushtokens WHERE pushToken LIKE '$pushToken'");
list($token_deactivated) = mysql_fetch_row($result2);
if ($token_deactivated==0){
if ($row['pushToken']!=""){
if (strlen($row['pushToken']) == 64){//All valid push tokens will have a 32x2=64 length
//echo "<br>$count. Sending push to ".$row['deviceID']." Device token = ".$row['pushToken'];
//echo "<br><br>";
if($count > $sendThreshold)
{
$pushMessage->sendMessage($row['pushToken'],$count,$appVersion,$mode,$message, $push_id);
}
if($count >= $push_update_count * $push_update_interval)
{
$pushlog_update = mysql_query("UPDATE pushlogs SET num_push_sent = '".$count."' WHERE push_id = '".$push_id."'");
if(!$pushlog_update)
{
// echo "pushlog table update error: ".mysql_error."<br />";
}
/* if($count<=$maxBar) // if failed again commment out and use block bleow
{
$prb->moveStep($count);
}
*/
$push_update_count++;
}
if($count >= $update_progressbar_count * $update_progressbar_interval)
{
if($count<=$maxBar)
{
$prb->moveStep($count);
}
$update_progressbar_interval++;
}
$count++;
// move the Bar
答案 0 :(得分:1)
由于httpd.conf
中的apache配置,页面显示可能已停止KeepAliveTimeout 300
由于php.ini
上的属性max_execution_time,PHP仍在运行答案 1 :(得分:0)
请注意,您根本没有调用mysql_error函数,请替换行:
echo“pushlog table update error:”。mysql_error。“
”;
这一个:
echo "pushlog table update error: ".mysql_error()."<br />";
此外,你正在做的是非常糟糕的做法。尝试制作更新程序,让您保持在会话中的位置,并更新/刷新页面并从您离开执行的地方继续。如果你的.htaccess中没有tim_out限制并不意味着什么。有时你可能没有设定时间限制。
首先尝试刷新页面,看看它是否对您有所帮助。您可以使用html元标记。或者:
header('Location: thispage.php');
然后让你编程的每一步都成为一个请求。