0

ID を取得する関数があり、それを使用して、それに関連するデータベース内の他の情報を 3 つのテーブルに分散して見つけます。次に、これを csv ファイルと比較します。csv ファイルは、ほとんどの場合、CPU を集中的に使用します。これを 1 つの ID で 1 回実行すると、最大で約 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 レポートが毎回呼び出される理由は、'eventName' と 'eventDate' が 'finance_logic.php' で検索されるためです。明らかに、これがすべてのイベント名と日付で設定されている場合、それらをすべて見つけるにはレポートを 1 回検索する必要がありますが、これを動的に行う方法がわかりません。私がまだ学んでいない何かがあると確信しているので、どんな提案も大歓迎です。

4

1 に答える 1

1

ローカルホストで時々使用する重いスクリプトがいくつかありますが、何も追加しないとタイムアウトになります。

簡単な解決策は、関数の実行回数を制限してからページをリロードし、停止したところから再開することです。

于 2012-12-07T10:02:46.580 に答える