Php文件有时会导致500个内部服务器错误

Php文件有时会导致500个内部服务器错误,php,Php,所以,在我们公司我们有分公司。每个分支机构都被分配了一组必须每天/每周/每月完成的任务 我编写了一个脚本,总结了当前月份每个分支已完成的任务。现在,这可能需要很长时间,这取决于有多少数据。通常随着月份的推移而增加 在月初,一切正常。月中/月底通常是问题开始发生的时候,因为有更多的数据要检查,因为有更多的天数 这是调用函数总结所有内容的代码,也是引发500错误的页面: <?php ini_set('max_execution_time', 3600); require_once('../..

所以,在我们公司我们有分公司。每个分支机构都被分配了一组必须每天/每周/每月完成的任务

我编写了一个脚本,总结了当前月份每个分支已完成的任务。现在,这可能需要很长时间,这取决于有多少数据。通常随着月份的推移而增加

在月初,一切正常。月中/月底通常是问题开始发生的时候,因为有更多的数据要检查,因为有更多的天数

这是调用函数总结所有内容的代码,也是引发500错误的页面:

<?php
ini_set('max_execution_time', 3600);
require_once('../../Connections/newConn.php');
require_once('../../Library/new/branchTaskSummary.php');
header('Content-Type: application/json');
$summary = array();
if(isset($_GET['month']) && isset($_GET['year']) && isset($_GET['update'])) {
    global $conn;
    $update = $_GET['update'] == 1;
    $month = $_GET['month'];
    $year = $_GET['year'];
    if(!$update) {
        $query = $conn->prepare("SELECT data_json, DATE_FORMAT(last_updated, '%d/%m/%Y %H:%i') AS last_updated FROM branchtasksummarydata WHERE month = ? AND year = ?");
        $query->bind_param('ii', $month, $year);
        $query->execute();
        $result = $query->get_result();
        if($result->num_rows > 0) {
            $summary = $result->fetch_assoc();
        } else {
            $summary = summariseEverything($month, $year);
        }
    } else {
        $summary = summariseEverything($month, $year);
    }
}
echo json_encode($summary);
?>
现在,当我调用这个函数时,它会挂起大约6/7分钟,然后才会出现内部服务器错误

有趣的是,我在我的本地机器上测试了它,它工作得很好。但是,在实时服务器上,它会抛出错误

编辑

在回来尝试解决这个问题后,我打开了所有可能的错误日志记录,每次循环分支时它都会给我这些信息:

Notice: Undefined index: total in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 61

Notice: Undefined index: total in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 62

Notice: Undefined offset: 9 in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 63

Notice: Undefined index: total in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 63

Notice: Undefined offset: 12 in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 64

Notice: Undefined index: total in C:\WS\JMIS\Library\new\branchTaskSummary.php on line 64

如果没有日志记录,它会抛出500个内部服务器错误。我一辈子都搞不清楚发生了什么事!代码是有效的,我已经在多个本地系统上进行了测试。但在我无法访问的实时服务器上似乎无法工作。

是时候进行一些良好的旧调试了。500错误是服务器错误,因此可能是任何错误。注释所有内容,然后按行/块打开。如果错误触发,并且它是一个函数,则进入该函数进行重复

在某个时刻,您将找到触发此错误的行。从这一点上,你试图找出为什么这条线会触发警告


你可能会幸运地在日志中找到它,或者有时日志已经满了,这是经常发生的。您可能需要检查apache和mysql日志,因为这也可能是一个数据库问题。

500内部服务器错误是一个服务器错误,它是由apache由于某些原因无法执行部分脚本造成的

检查错误的最佳方法是在apache文件夹中打开错误日志文件并跟踪该行

这对你来说应该不难解决,我想用

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

查找错误。

错误500很难处理,原因有很多,如:

1.htaccess配置错误

2 Apache配置错误

3个PHP解包函数

4内存泄漏

5弱服务器

6等

首先,如果没有成功,请测试上述解决方案,然后对所有未定义的通知使用错误记录应用程序,如或,如果未设置,则可以将值设置为0。 例如:

在这种情况下,如果$instance[tasks][total]的值尚未在该特定实例上设置,您将遇到未定义的通知

因此,解决这一问题的办法可能是:-

在你有这样的价值分配的任何地方都有这样的逻辑,应该可以解决你未定义的问题。 对于未定义的偏移量问题,您可以再次检查该值是否设置在:- 例如:

在这里,如果您的 $instance[tasks][每月][$task[department]][$task[id]][已完成] 未设置,因此此问题的解决方案可能是:-


我解决了这个问题。这是一个IIS FastCGI活动超时配置。

日志怎么说?或者自己添加一些日志记录,看看哪里出错了。有太多的代码和业务逻辑在进行,单凭你的帖子是很难帮助你的。一个500的错误几乎总是意味着一条错误信息记录在某个地方。您需要找出抛出了什么错误。由于数据量的增加,我的钱可能会出现内存不足或执行时间过长的情况。这两个限制都可以提高,但您也可以调整您的函数,使其更有效地处理数据。唯一的php错误日志只是警告,与我的代码无关。至于总警告-您没有在$instance=array中定义它。。。,因此,在这里添加它应该可以消除这些警告。可能是内存不足,而不是时间。尝试将内存限制加倍,看看它是否能持续更长时间,然后再给出500。ini_设置“内存限制”,“256M”;将256替换为当前内存限制的两倍。我们不使用apache,我们使用IIS并运行Php。我猜您没有按照预期记录Php错误。请查看这个网址。别忘了把它标记为答案,如果它对你有帮助的话。至少,把赏金给那些试图帮助你最多的人,你的问题和答案有点蹩脚。
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
$instance["tasks"]["total"] += 1;
if (!isset($instance["tasks"]["total"])) {
   $instance["tasks"]["total"] = 0;
}
$instance["tasks"]["total"] += 1;
if(!$instance["tasks"]["monthly"][$task["department"]][$task["id"]]["completed"]) {
        $instance["tasks"]["monthly"][$task["department"]][$task["id"]]["completed"] = 0;
    }
if (isset($instance["tasks"]["daily"][$task["department"]][$task["id"]]["completed"]) && !$instance["tasks"]["daily"][$task["department"]][$task["id"]]["completed"]) { $instance["tasks"]["daily"][$task["department"]][$task["id"]]["completed"] = 0; }