0

無限関数と思われる関数がありますが、起動するとロードされ続けます。この場合、私が21を指定している間、彼は約70〜79秒進み続けますset_time_limit

起動しても何も起こらず、75秒が経過すると突然8倍の日付差が表示されます。一斉に。1秒ごとにテキストを表示し、1時間遅れることなく、以下のすべての値は、1秒は速くなるかもしれないと思ったので、上記の数値よりも低くなりますが、それでも10秒間遅れます。

set_time_limit (21);
// 21 seconds until its done should become an hour later
// this was to test 
$x=1;
$startTime = time();
$timeout = 10;   //timeout in seconds
for ($i=0;;$i++)
{
   if(time() > $startTime + ($x * $timeout)) {

     $x++;
     $today=date('d-m-Y H:i:s');
     echo "it's now: ". $today . "</br>";
     $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013));
     $difference=get_datediff_string($vandaag,$nieuwjaar); 
     // get_datediff_string() is defined somewhere below,
     // but wasn't worth to show it.
     echo "it is $difference untill newyear"; 

   }
}
4

3 に答える 3

1

usleepa を使用してスクリプトを一時停止してみませんか? そして、なぜあなたの目標は1時間ですか?JavaScriptでこれを行うべきだと私には思えます..

<?php
$x=1;
$startTime = time();
$timeout = 10;   //timeout in seconds
for ($i=0;;$i++)
{

   set_time_limit (10);
   usleep(1000);

   $x++;
   $today=date('d-m-Y H:i:s');
   echo "it's now: ". $today . "</br>";
   $newyear = date('d-m-Y H:i:s', mktime(0, 0, 0, 01, 01, 2013));
   $difference=get_datediff_string($vandaag,$nieuwjaar); // get_datediff_string() is defined somewhere below but wasn't worth to show it.
   echo "it is " . $difference . " untill newyear"; 
   flush();

}
于 2012-05-05T06:31:06.037 に答える
0

これは、暗黙的なバッファリングが原因です。サーバー側にある可能性があり(この場合、後で呼び出すだけflush()echo修正されるはずです)、ブラウザーにある可能性があります(この場合、運が悪い)。

この種のスクリプトは、とにかくコンソールプログラムである必要があります。ブラウザのコンテキストで何をしているのか、私にはわかりません。

于 2012-05-05T06:19:28.827 に答える
0

日付を $timeout 秒ごとに出力したい場合は、ループの最後で sleep($timeout) を使用することを検討してください。これにより、2 つの日付出力の間にループが何千回も実行されず、遅延の問題が発生しなくなります。

最後に、このスクリプトはサーバー側では役に立たないと思います。新年のカウントダウンを表示したい場合は、javascript で実行してください。

于 2012-05-05T06:25:36.000 に答える