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 を確認すると、有効になっているようです。以上です!それほど複雑ではありません。誰かが私にいくつかのトリックまたはより良い方法を理解するのを手伝ってくれるなら、助けてください.
終了するまでにもっと時間がかかるようにループが必要です。よろしくお願いします:-)

編集: スクリプトの動作を確認したい人のために、6 つの番号しかなく、当選しやすく、タイムアウトしない宝くじを用意しています。ここに移動して、必ず一番上のオプション (ロト 649) を選択してください。http://diablogosse.com/test/lottosims.php

EDIT2:これがひどく出くわした場合は申し訳ありませんが、かなりの数の投稿の後に何かを明確にしたかっただけです. 私の質問は、「なぜ私はこれをしたいのですか??」ではありません。質問は、「やりたいことをどのように機能させることができるか」のようなものです。;-)

クリス

4

3 に答える 3

0

ちょっとした考え:

アプリの目標:

  • ユーザーは1から49までの6つのお気に入りの数字を入力します。つまり[1..49]
  • アプリは1から49までの6つの乱数を生成します。つまり[1..49]
  • 両方の番号のセットが同じ場合、ユーザーWINSssss。

シミュレーションの目標:

  • ラッキーナンバーで勝つために何日かかるかをユーザーに知らせましょう

javascriptで実装すると、サーバーリソースを大幅に節約できます。何度もループするのではなく、チェックするたびに戻ってください。一致する場合はユーザーが勝ちます。ユーザーが勝てなかった場合は、挑発的なメッセージで応答して、ユーザーにもう一度プレイするように促します。

You were so close, 4 matching numbers!また遊びたい?

于 2013-02-13T15:33:58.927 に答える
0

GoDaddy の場合と同様に、PHP がセーフ モードの場合、set_time_limit は機能しません。

こちらをご覧ください: ini_set, set_time_limit, (max_execution_time) - not working .

そのループで何を達成しようとしているのかお聞きしてもよろしいですか?

于 2013-02-13T15:13:30.593 に答える
0

あなたが使用できる

set_time_limit ( int $seconds )

ループの開始時と各ローテーションの後、スクリプトの制限時間は x ずつ増加します。

于 2013-02-13T15:10:22.267 に答える