2016-07-02 7 views
0

whileループで条件が真でない限り、コードは$ user_login変数の内容を出力します。ループ内に直接変数を宣言すると、これは問題ありません。しかし、宣言が外に出されたときになぜそれが掛かっているのか理解できますか?コードは以下の通りです。Whileループは変数の宣言がループの外側で行われたときにコンピュータをハングさせます

<?php 
$logins = 'log/logins.txt'; // The login file 
$file_handle = fopen($logins, 'r') or die('Can\'t open login records'); 
$user_login = fgets($file_handle); 

// Now let's loop 
echo '<ol>'; 
while (!feof($file_handle)) { 
// When I put this $user_login variable outside the loop the computer hangs 
// Otherwise the code works fine 
// $user_login = fgets($file_handle); 
    echo '<li>' . $user_login . '</li><br>'; 
} 
echo '</ol><br>'; 
fclose($file_handle); 
?> 
+0

エラーログには何もありませんか? –

+0

ああ、エラーログ。 :) [03-Jul-2016 05:46:07] PHP致命的なエラー:40秒でC:\ wamp \ www \ logins \ index.phpで120秒を超える最大実行時間 - [03-Jul-2016 05: 46:18アジア/マニラ] PHPスタックトレース: - [03-Jul-2016 05:37:28アジア/マニラ] PHP 2. feof()C:\ wamp \ www \ logins \ index.php:35 – Joey

答えて

2

あなたはそれ以外の条件!feof($file_handle)の評価は、常に同じに返し、そう、あなたのwhileループは決して終了します、ループにファイルポインタを移動する必要があります。

あなたはループの中で、このような行を必要とする理由である:

$user_login = fgets($file_handle); 

このfgets()が前方にファイルポインタを移動し、ある時点で、それはファイルの最後に到達し、while状態を行いますfalse

ループ内にその行がある場合、$user_loginはループの各繰り返しで異なる値を取得することに注意してください。あなたがその新しい価値をもらっていないなら、ループするのは意味がありません。あなたは...永遠に同じ<li>を生産するだろう

NB:クロージング</li>または</ol>タグの後<br>を置く必要はありません。

+0

こんにちはデータを消去する機能があります。私はこの機能をどこに置くべきですか? $ user_login = clean_data($ user_login); //これはループ内にあるか、echo clean_data($ user_login);です。 – Joey

+0

どちらかが動作します。 'echo clean_data($ user_login);'はうまくいきます。 – trincot

関連する問題