0

请耐心等待,因为我对此有点陌生。我有一个页面在提交表单后调用另一个页面。新页面包含一个冗长的 php 循环,该循环在页面显示之前运行。问题是,服务器在循环有时间完成之前发送了 500 错误。我与 GoDaddy 有经济共享的 linux 托管,但他们不允许我访问错误日志。我很确定这不是内存问题。我怀疑apache只是超时了。我已经缩短了循环并且它工作正常,所以我确信代码没有任何问题,但我想知道是否有任何技巧可以更好地编码循环,或者欺骗 apache 给循环更多时间,或任何使这项工作。在此先感谢,这是代码:

循环开始前的一些变量:

$usernum1 = $_POST['num1']; 
$usernum2 = $_POST['num2']; 
$usernum3 = $_POST['num3']; 
$usernum4 = $_POST['num4']; 
$usernum5 = $_POST['num5']; 
$usernum6 = $_POST['num6']; 
$usernum7 = $_POST['num7']; 

$usernumbers = array($usernum1, $usernum2, 
                     $usernum3, $usernum4, 
                     $usernum5, $usernum6, 
                     $usernum7);

sort($usernumbers, SORT_NUMERIC);

$i = 0;
$counter = 0;
set_time_limit(0);
$input = range(1, 49);

这是循环:

do   {

$rand_keys = array_rand($input, 7);
sort($rand_keys, SORT_NUMERIC);

if ($input[$rand_keys[0]] == $usernumbers[0] && 
    $input[$rand_keys[1]] == $usernumbers[1] && 
    $input[$rand_keys[2]] == $usernumbers[2] && 
    $input[$rand_keys[3]] == $usernumbers[3] && 
    $input[$rand_keys[4]] == $usernumbers[4] && 
    $input[$rand_keys[5]] == $usernumbers[5] && 
    $input[$rand_keys[6]] == $usernumbers[6]) 
 {   
  $i = 1;
 }

$counter = $counter + 1;

     } while ($i == 0);

您可以看到循环在 $i == 1 时结束,并且当所有数字匹配时 $i 被分配 1。还要提一下,我在服务器上的php5.ini文件中添加了max_execution_time = 1000,当我查看phpinfo时,似乎已经生效了。就是这样!不是很复杂。如果有人可以帮我找出一些技巧或更好的方法,请帮忙,因为我已经为此绞尽脑汁了 2 天。
我只需要循环有更多的时间来完成。再次提前感谢:-)

编辑:对于那些希望看到脚本正常工作的人,我将它用于只有六个号码的彩票,更容易中奖,并且不会超时。转到此处并确保选择顶部选项(乐透 649)。http://diablogosse.com/test/lottosims.php

EDIT2:对不起,如果这很糟糕,但我只是想在很多帖子之后澄清一些事情。我的问题不是“我为什么要以上帝的名义这样做??”。这个问题更像是:“我怎样才能让我想做的事情发挥作用。”。;-)

克里斯

4

3 回答 3

0

你可以使用

set_time_limit ( int $seconds )

在循环开始时和每次旋转后,脚本时间限制将增加 x

于 2013-02-13T15:10:22.267 回答
0

当 PHP 处于安全模式时,set_time_limit 不起作用,GoDaddy 似乎就是这种情况。

见这里:ini_set, set_time_limit, (max_execution_time) - 不工作

我可以问你你想用那个循环实现什么吗?

于 2013-02-13T15:13:30.593 回答
0

只是一个想法:

应用目标:

  • 用户输入 1 到 49 之间的六个最喜欢的数字,即 [1..49]
  • 应用程序生成 1 到 49 之间的六个随机数,即 [1..49]
  • 如果两组数字相同,则用户 WINSssss..

模拟目标:

  • 让用户知道幸运数字中奖需要多少天

javascript中实现将为您节省大量服务器资源。与其循环这么多次,不如在每次检查后返回。如果有匹配用户获胜。如果用户没有获胜,则回复嘲讽消息以激起用户再次玩。

You were so close, 4 matching numbers!想再玩吗?

于 2013-02-13T15:33:58.927 回答