2016-07-02 6 views
0

Wenn die Bedingung in der while-Schleife nicht erfüllt ist, sollte der Code den Inhalt der Variablen $ user_login ausgeben. Das ist in Ordnung, wenn ich die Variable direkt innerhalb der Schleife deklariere. Aber können Sie mir helfen zu verstehen, warum es hängt, wenn die Erklärung draußen gemacht wird? Der Code ist unten.Die Schleife while bewirkt, dass der Computer hängt, wenn die Deklaration der Variablen außerhalb der Schleife erfolgt

<?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

Alles in den Fehlerprotokollen? –

+0

Oh das Fehlerprotokoll. :) [03-Jul-2016 05:46:07] PHP Schwerwiegender Fehler: Maximale Ausführungszeit von 120 Sekunden in C: \ wamp \ www \ logins \ index.php in Zeile 40 überschritten - [03-Jul-2016 05: 46:18 Asien/Manila] PHP Stack-Spur: - [03-Jul-2016 05:37:28 Asien/Manila] PHP 2. foof() C: \ wamp \ www \ logins \ index.php: 35 – Joey

Antwort

2

Sie müssen die Dateizeiger in der Schleife bewegen, da sonst die Auswertung der Bedingung !feof($file_handle) immer das gleiche zurückzukehren, und so Ihre while Schleife wird nie verlassen.

Deshalb sollten Sie eine Zeile wie diese in der Schleife müssen:

$user_login = fgets($file_handle); 

Diese fgets() verschiebt die Datei Zeiger vorwärts, und an einem bestimmten Punkt wird es das Ende der Datei erreichen und machen den while Zustand false.

Beachten Sie, dass $user_login in jeder Iteration der Schleife einen anderen Wert erhält, wenn Sie diese Zeile innerhalb der Schleife haben. Es macht keinen Sinn, eine Schleife zu machen, wenn Sie diesen neuen Wert auch nicht erhalten. Sie wäre die gleiche <li> für immer und ewig produzieren ...

NB: Es gibt keine Notwendigkeit, <br> nach einer Schließung </li> oder </ol> Tag zu legen.

+0

Hallo ich eine Funktion haben, um die Daten zu bereinigen. Wo sollte ich diese Funktion platzieren, sollte es so sein? $ user_login = clean_data ($ user_login); // Dies ist innerhalb der Schleife oder echo clean_data ($ user_login) ;. – Joey

+0

Entweder wird funktionieren. 'echo clean_data ($ user_login);' ist in Ordnung. – trincot