Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.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_Mysql_Arrays_Csv_Timeout - Fatal编程技术网

如何在php中为数组中的每个元素重复函数而不超时

如何在php中为数组中的每个元素重复函数而不超时,php,mysql,arrays,csv,timeout,Php,Mysql,Arrays,Csv,Timeout,我有一个函数,它将获取一个id,并用它查找数据库中与之相关的其他信息,这些信息分布在3个表中。然后将其与csv文件进行比较,csv文件在大多数情况下都是cpu密集型文件。用一个id运行一次最多需要8到10秒,但我被要求在数据库中的不同id上自动运行它。为此,我创建了一个ID数组,该数组在任何时候都与数据库中的条件相匹配,然后运行“while”语句为数组中的每个元素重复该函数,但它可能会到达其中的4个元素,我得到以下错误: 服务器错误 服务器遇到内部错误,无法完成 你的要求。服务器过载或中存在错误

我有一个函数,它将获取一个id,并用它查找数据库中与之相关的其他信息,这些信息分布在3个表中。然后将其与csv文件进行比较,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);
    }
提前谢谢


p、 每次调用报告的原因是使用“finance_logic.php”搜索“eventName”和“eventDate”。显然,如果已经设置了所有事件名称和日期,则需要搜索报告才能找到所有事件名称和日期,但我不确定如何动态执行此操作。欢迎您提出任何建议,因为我确信有些东西我还没有学会。

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


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

您发布的是浏览器错误消息。尝试关闭浏览器设置中的任何“友好”错误消息,然后重试,它将显示来自Web服务器的实际错误,以查看是否确实是执行超时。您还可以检查Web服务器的错误日志。当PHP脚本比fastcgi允许的时间更长时,在fastcgi情况下也可以给出错误500来控制执行时间限制。在这种情况下,必须增加fastcgi的超时时间。但是,最好只读取CSV文件中的一个,并迭代CVS每行的事件。然而,代码很难返工。如果您使用实际函数而不是horific include('finance_logic.php'),事情会变得容易得多;在while循环中。函数可以更好地隔离代码,使其更易于理解和正确使用。谢谢lanzz,我会检查一下。还有Eelke,include中的代码会根据报告和使用它的人发生显著的变化,所以我发现最简单、问题较少的方法就是使用这种格式。是什么让它比函数更可怕?这仅仅是因为它不容易理解,还是因为某种功能上的原因?还有,艾尔克。我同意不建议每次都读这份报告,但正如你所看到的,我每次都试图找到它的具体部分,我不确定如果不这样做,我会怎么做。我需要检查是否满足特定设置,但需要是动态的。否则,我将为每个数组元素设置搜索集,它将在第一次搜索每个数组元素。因为我每次都需要更换它,你知道我怎样才能完成这项工作吗?我曾尝试过这样做,但没能让它正常工作。您建议如何使其工作?您可以通过添加标志来限制FOR的执行。例如,当$i=5时,您用POST/GET值$i=5重新加载页面,然后从$i=5而不是$i=0重新启动For。嗯,我很生气,我没有想到这一点。我来试试,我刚做的。更直截了当。尽管如此,仍然时常出现错误。正在调查,但是谢谢。
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!";
                            }