Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 脚本关闭不够快-脚本头过早结束?_Php_Javascript - Fatal编程技术网

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

Php 脚本关闭不够快-脚本头过早结束?,php,javascript,Php,Javascript,我有下面的脚本来检查是否有新消息,如果菜单栏中有一些新消息,那么就用括号括起来。这样做的目的是,你不必刷新页面就可以看到收件箱中有新邮件。脚本工作得很好,但是,它给服务器带来了一些问题,并返回了进程响应-“脚本头过早结束”-有什么办法可以解决这个问题吗 头javascript: <script> $(document).ready(function(){ $("#inmsg").load("./get_user_msg.php"); var refreshId

我有下面的脚本来检查是否有新消息,如果菜单栏中有一些新消息,那么就用括号括起来。这样做的目的是,你不必刷新页面就可以看到收件箱中有新邮件。脚本工作得很好,但是,它给服务器带来了一些问题,并返回了进程响应-“脚本头过早结束”-有什么办法可以解决这个问题吗

头javascript:

<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>
<?
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}";

?>

$(文档).ready(函数(){
$(“#inmsg”).load(“/get#u user_msg.php”);
var refreshId=setInterval(函数(){
$(“#inmsg”).load('./get_user_msg.php?randval='+Math.random());
}, 3000);
$.ajaxSetup({cache:false});
});
get\u user\u msg.php:

<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>
<?
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}";

?>

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

  • 如果脚本由于资源限制而被终止,则httpd.conf中的RLimitCPU和RLimitMEM指令也可能对错误负责

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

  • 如果suphp的日志大小达到2GB或更大,您可能会看到脚本头过早结束错误。查看日志包含的内容,并将其gzip或null。重新启动apache,然后处理SUPPP日志揭示的任何问题。suphp日志位于:/usr/local/apache/logs/suphp\u log

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


  • 好的,我可以在这里看到您的设置中的一些问题:

  • 当然,您可以将超时时间间隔缩短为更实际的时间间隔,例如每1分钟一次。。。或者30秒,如果你想到大多数电子邮件客户端,他们通常只会每隔5分钟左右查找一次新邮件,为什么不尝试从那里开始,看看这是否会减少服务器的负载

  • 您需要使用microtime(true)评测您的计数脚本;在脚本的开头和结尾,要查看运行此脚本所需的秒数,您可能还需要检查“msg_read”和“msg_to”列上是否有索引

  • 您可以在此处从apache了解有关过早错误的更多信息:


  • 这种情况每次都会发生?可能是因为服务器崩溃而限制了cpu。对于这种类型的场景,最正确的方法是使用套接字,因为如果我们每3秒发出一个用户数乘以用户数的请求,服务器当然不能忍受。你应该在PHP中使用完整的openning标记:
    @Sharky-不应该偶尔使用一次,因为我认为服务器限制了进程。使用实时应用程序的一个好解决方案是使用套接字,然而,实现起来并不简单,因为你依赖于通过TCP进行通信的应用程序,而且,如果数据库中有很多查询,你应该有一个好的服务器。如果我把它从3000改为30000,会有帮助吗?然后每30秒检查一次,对吗?:)这有助于解决所有问题,具体取决于执行此类请求的登录用户数量,一旦您对提供应用程序的服务器有物理限制,就会导致问题。他的方法称为长轮询(longpolling),您可以不时向服务器发出请求,这会在服务器上产生流量,也就是说,这不是最佳解决方案。推技术插座是的,我会从那里开始,把它调低到30000毫秒,让它运行一段时间,然后看看错误是否再次发生。如果要复制+粘贴,也要反向链接到源代码。该文本在许多网站上都有,包括:。例如,见