脚本关闭不够快-脚本头过早结束

Script not closing fast enough - premature end of script headers?

本文关键字:脚本 结束 不够      更新时间:2023-09-26

我有下面的脚本来检查新消息,如果有一些,菜单栏将包含带有新消息数量的括号。这个想法是,你不需要刷新页面,看到你有新的邮件在你的收件箱。脚本工作得很好,但是,它导致服务器出现一些问题,并返回过程响应- '脚本头的过早结束' -任何想法我如何解决这个问题?

头Javavascript:

<script>  
$(document).ready(function(){
    $("#inmsg").load("./get_user_msg.php");
    var refreshId = setInterval(function() {
        $("#inmsg").load('./get_user_msg.php?randval='+ Math.random());
    }, 3000);
    $.ajaxSetup({ cache: false });
});
</script>

get_user_msg.php:

<?
session_start();
include "conf/config.php";
$session_memberid = $_SESSION['memberid'];
$head_getnewmsg = mysql_query("SELECT * FROM messages WHERE msg_to = '$session_memberid' AND msg_read = 'no'");
$num_new_msg = mysql_num_rows($head_getnewmsg);
if ( $num_new_msg != '0' ) {
$head_show_new_msg = " ($num_new_msg)";
} else { $head_show_new_msg = ''; }
echo "inbox{$head_show_new_msg}";
?>

可能原因:

  1. 升级或降级到不同版本的PHP可能会在httpd.conf中留下残留的选项。在命令行中使用PHP -v检查PHP的当前版本,并在httpd.conf中搜索提到其他版本的任何行。如果找到了,注释掉它们,提取httpd.conf并重新启动apache。

  2. httpd.conf中的RLimitCPU和RLimitMEM指令也可能导致脚本由于资源限制而被终止。

  3. suEXEC、mod_perl或其他第三方模块中的配置问题通常会干扰脚本的执行并导致错误。如果是这些原因,与细节相关的其他信息将在apache error_log中找到。

  4. 如果suphp的日志大小达到2GB或更大,您可能会看到脚本头错误的过早结束。查看日志包含什么内容,然后对其进行gzip压缩或将其清空。重新启动apache,然后处理php日志显示的任何问题。suphp日志位于:/usr/local/apache/logs/suphp_log

  5. 脚本的权限也可能导致此错误。CGI脚本只能访问httpd.conf中指定的User和Group允许的资源。在这种情况下,错误可能只是指出一个未经授权的用户正在试图访问一个脚本。

好的,我可以在这里看到一些问题:

  1. 当然你可以把超时时间缩短到更现实的时间,比如每1分钟…或者30秒,如果您认为大多数电子邮件客户端通常每5分钟左右才查找新邮件,为什么不尝试从那里开始,看看是否可以减少服务器的负载。

  2. 你需要配置你的计数脚本,使用microtime(true);在脚本的开头和结尾查看运行该脚本所需的秒数,您可能还想检查'msg_read'和'msg_to'列上是否有索引。

  3. 你可以从apache这里阅读更多关于过早错误的信息:500服务器错误:脚本头的过早结束: