0

ホストを変更したばかりで、問題は 1 つだけで、すべてがスムーズに実行されるようになりました。

ユーザーにスコアを更新するオプションを提供するページ (precisely.me/fpl/epl) があります。これは基本的に、別のサイトからデータをフェッチし、テーブルを更新してから、precision.me/fpl/epl にリダイレクトする、precision.me/fpl/eplrefresh へのリンクです。

問題は、Chrome でこのエラーが発生しているということです - http://precisely.me/fpl/eplrefreshの Web ページが一時的にダウンしているか、新しい Web アドレス
や Firefox で同様のものに永久に移動した可能性があります - 接続ページの読み込み中にサーバーにリセットされました。

php.ini で max_execution_time = 300 を設定しようとしましたが、うまくいきませんでした。このエラーにもかかわらず、スクリプトはバックグラウンドで正常に実行されており、スコアが更新されることに注意してください。しかし、ユーザーをリダイレクトする前に、エラーが発生します。

動作させるには、php.ini で何を変更する必要がありますか?

これは、ローカルホストと以前のサーバーで機能するため、実際には必要ありません。しかし、とにかく eplrefresh.php のスニペット

<?php   
$dbc=mysqli_connect('localhost','root','','fplscore') or die("can't connect");
$team_epl=array("Arsenal","Aston Villa", "Chelsea","Everton"); //Trimmed for now

$teamid_epl=array("24854","17","109276","57");

$playernames_epl=array("Jackoff", "Epic Fail", "ENR", "Beric");


set_time_limit(500); //Minimum time for page to expire
$i=0;
foreach ($teamid_epl as $x)
{$team_name=$team_epl[$i];  

$thisgw = mysqli_fetch_array(mysqli_query($dbc,"select gwno from gameweek"));
$gw=$thisgw['gwno'];
$str2="http://fantasy.premierleague.com/entry/".$x."/event-history/".$gw; 
    $file=fopen($str2,"r") or die("Heavy load on FPL. Please try later");
    while(!feof($file))
            {$str=fgets($file);

            if(preg_match('/(<div class="ismSBValue ismSBPrimary">(.*))/', $str,$ar)) 
                {   $str2=fgets($file);
                    $str2=fgets($file); 
                    $str2 = strip_tags($str2);
                    $str2=str_replace("pts","",$str2);
                    $temp1=(int)$str2;

                }

            if(preg_match('/(<dl class="ismDefList ismSBDefList">(.*))/', $str,$ar)) 
                    {           .....
                                                    $str2=fgets($file);
                            $str2 = strip_tags($str2);
                            $str2=str_replace("pts","",$str2);
                            $str2=str_replace("(-","",$str2);
                            $str2=str_replace(")","",$str2);
                            $temp2=(int)$str2;  
                            $z=$temp1-$temp2;
$gw=$gw-19;         
                            $gw="gw".$gw;
                            $q="update epl_score set ".$gw."=$z  where team='$team_name'" ;
                            $result=mysqli_query($dbc,$q) or die("unable to execute query");

                    }


            }
$i++;
}   
header("Location: epl");        
?>
4

2 に答える 2

0

クリック -> リモート サーバーからの更新 -> リダイレクトの構成は、あまり良いものではありません。ユーザーが数人を超えると、ワーカーが不足するため、深刻な問題が発生します。

cronjob を設定して最新のスコアを取得し、それらをどこかに保存して、ajax で更新スコアを取得してみませんか。オーバーヘッドがはるかに少なくなります (または、さらに良いことに、それらをプッシュしてください!)。

何が問題なのかを知るために、コードを確認する必要があります。

Ps、私のお金は、apache サーバーと php バックエンドの間のどこかでタイムアウト/エラーになっています。これはおそらく修正できるものではありません。

コードを投稿しました ..... exit(); を追加してみてください。ヘッダーの後、PHPコードを閉じないでください(改行を送信する可能性があり、リダイレクト時にそれを望まない)

于 2013-03-30T13:16:34.980 に答える
0

パフォーマンスを向上させるために、コードを少し再構築しました。私が作成した最も重要なこと$thisgw = mysqli_fetch_array(mysqli_query($dbc,"select gwno from gameweek"));は、常に同じであるため、foreach から削除することです。

updateそれ以外に、クエリはチームごとに何回実行されますか? これは正確に 1 回である必要があります。したがってwhile、ファイルリーダーからこの部分を削除しようとします。

<?php   
$dbc=mysqli_connect('localhost','root','','fplscore') or die("can't connect");

$epl_arr = array(
    array('id' => 24854, 'team' => 'Arsenal', 'player' => 'Jackoff'),
    array('id' => 17, 'team' => 'Aston Villa', 'player' => 'Epic Fail'),
    array('id' => 109276, 'team' => 'Chelsea', 'player' => 'ENR'),
    array('id' => 57, 'team' => 'Everton', 'player' => 'Beric'),
);

$thisgw = mysqli_fetch_array(mysqli_query($dbc,"select gwno from gameweek"));

foreach ($epl_arr as $ea)
{
    $gw = $thisgw['gwno'];
    $team_name = $ea['team']; 
    $team_id = $ea['id']; 
    $player_name = $ea['player']; 

    $str2="http://fantasy.premierleague.com/entry/".$team_id."/event-history/".$gw; 
    $file=fopen($str2,"r") or die("Heavy load on FPL. Please try later");

    while(!feof($file))
    {
        $str=fgets($file);

        if(preg_match('/(<div class="ismSBValue ismSBPrimary">(.*))/', $str,$ar)) 
        {   
            $str2 = fgets($file);
            $str2 = fgets($file);
            $str2 = strip_tags($str2);
            $str2 = str_replace("pts","",$str2);
            $temp1 = $str2;

        }

        if(preg_match('/(<dl class="ismDefList ismSBDefList">(.*))/', $str,$ar)) 
        {
                $str2 = fgets($file);
                $str2 = strip_tags($str2);
                $str2 = str_replace("pts","",$str2);
                $str2 = str_replace("(-","",$str2);
                $str2 = str_replace(")","",$str2);
                $temp2 = $str2;  
                $z = $temp1-$temp2;
                $gw = $gw-19;         
                $gw = "gw".$gw;
                $q = "update epl_score set ".$gw."=$z  where team='$team_name'" ;
                $result=mysqli_query($dbc,$q) or die("unable to execute query");
        }
    }
}   

header("Location: epl");        
?>

これで解決しない場合は、 も参照してくださいmemory_limit

headerテスト目的で、ファイルの最後にある を削除することもできます。それ以前の出力に問題がある可能性があります。

設定でデバッグも試すini_set('error_reporting', E_ALL);

于 2013-03-30T13:36:34.827 に答える