0

我刚刚更换了主机,现在一切运行顺利,只有一个故障。

我有一个页面(precisely.me/fpl/epl),它为用户提供了刷新分数的选项。这基本上是指向exactly.me/fpl/eplrefresh 的链接,它从另一个站点获取数据,更新表,然后将其重定向回exactly.me/fpl/epl。

问题是我在 Chrome 上收到此错误 - http://precisely.me/fpl/eplrefresh上的网页可能暂时关闭,或者它可能已永久移动到新网址
和 Firefox 上的类似地址 - 连接到服务器在页面加载时被重置。

我试图在 php.ini 中设置 max_execution_time = 300 但这没有用。请注意,尽管出现此错误,但脚本在后台成功运行,并且分数确实会更新。但在它可以重定向用户之前,我得到了错误。

我应该在 php.ini 中进行哪些更改才能使其正常工作?

这真的不需要,因为它适用于 localhost 和我以前的服务器。但无论如何,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 回答