0

我有一个函数,它将获取一个 id,并在数据库中找到与它相关的其他信息,这些信息分布在 3 个表中。然后它将它与一个 csv 文件进行比较,该文件通常是 cpu 密集型的。用一个 id 运行一次最多大约需要 8 到 10 秒,但我被要求让它在数据库中的不同数量的 id 上自动运行。为此,我在任何时候创建了一个与数据库中的条件相匹配的 id 数组,然后运行一个“while”语句来为数组中的每个元素重复该函数,但它最多可能有 4 个,我得到以下错误:

服务器错误!

服务器遇到内部错误,无法完成您的请求。服务器过载或 CGI 脚本中存在错误。

如果您认为这是服务器错误,请联系网站管理员。

错误 500

我承认我的代码可能要干净得多,因为我仍在学习,但真正的瓶颈似乎是阅读 csv,这是一份每天都在变化的报告。我尝试了不同的组合,最好的结果是(请不要为此责备我,因为我知道这很愚蠢,但其他方法尚未奏效)运行代码如下:

$eventArray = eventArray($venueId);
$totalEvents = count($eventArray);

for($i=0; $i<$totalEvents; $i++)
    {
        $eventId = $eventArray[$i];
        echo $eventId;
        echo $datename = getEventDetails($eventId, $zone);
            // date of event
        echo $eventDate = $datename['eventDate'];
            // vs team
        echo $eventName = $datename['eventName'];

        $file_handle = fopen("data/rohm/sales/today.csv", "r");
        while (!feof($file_handle) )
            {
                $line_of_text = fgetcsv($file_handle, 200);
                include('finance_logic.php');
            }
        fclose($file_handle);
    }

是的,它每次都在重复读取 csv,但我无法让它以任何其他方式运行,所以如果这是问题,我真的很感激一些关于更好地处理 csv 的指导。如果它与下面列出的“finance_logic.php”代码相关:

if($line_of_text[0] == "Event: $eventName ")
{
    $f = 1;
    $ticketTotalSet = "no";
    $killSet = 'no';
    // default totals zero
    $totalHolds = 0;
    $totalKills = 0;
    $ticketSold = 0;
    $ticketPrice = 0;
    $totalCap = 0;
}
if($f == 1 && $line_of_text[0] == "$eventDate")
    {
        $f = 2;
    }
    if($f == 2 && $line_of_text[0] == "Holds")
        {
            $f = 3;
            while($line_of_text[$col] !== "Face Value Amt")
                {
                    $col++;
                }
        }
        if($f == 3 && $line_of_text[0] !== "Face Value Amt")
            {
                if($f == 3 && $line_of_text[0] == "*: Kill")
                    {
                        $totalKills = $line_of_text[$col];
                    }
                $holdsArray[] = $line_of_text[$col];
            }
        if($f == 3 && $line_of_text[0] == "--")
            {
                $f = 4;
            }
            if($f == 4 && $line_of_text[0] == "Capacity")
                {
                    $totalCap = $line_of_text[$col];
                    $f = 5;
                }   
                if($f == 5 && $line_of_text[0] == "Abbreviated Performance Totals")
                    {
                        $f = 6;
                    }
                    if($f == 6 && $line_of_text[0] == "$eventName")
                        {
                            // change when 1 ticket exists
                            $ticketTotalSet = "yes";
                            // set season tickets
                            include("financial/seasontickets/$orgShortName.php");
                            // all non season are single tickets
                            if(!isset($category))
                                {
                                    $category = 'single';
                                }
                            $ticketName = $line_of_text[2];
                            $ticketSold = $line_of_text[3];
                            $ticketPrice = $line_of_text[4];
                            addTicketType($eventId, $ticketName, $category, $ticketSold, $ticketPrice);
                            unset($category);
                        }
                        if($f == 6 && $ticketTotalSet == "yes" && $line_of_text[0] !== "$eventName")
                            {
                                $totalHolds = (array_sum($holdsArray) - $totalKills);
                                // add cap, holds and kills
                                addKillsHoldsCap($eventId, $totalCap, $eventId, $totalHolds, $totalKills);
                                // reset everything
                                $f = 0;
                                $ticketTotalSet = "no";
                                echo "$eventName updated!";
                            }

提前致谢!

ps 每次调用报告的原因是使用“finance_logic.php”搜索“eventName”和“eventDate”。显然,如果已经设置了所有事件名称和日期,则需要对报告进行一次搜索才能找到它们,但我不确定如何动态地做到这一点。任何建议都会受到欢迎,因为我确信那里有一些我还没有学到的东西。

4

1 回答 1

1

我有时会在 localhost 中使用一些繁重的脚本,如果我不添加任何内容,它们就会超时。

一个简单的解决方案是限制函数的执行次数,然后重新加载页面,然后在停止的地方重新启动。

于 2012-12-07T10:02:46.580 回答