Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Frage: SChleife dauert zu lange

Diskussion: Frage: SChleife dauert zu lange im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Code: <?php $file = fopen("bilder.list","r"); $i = 0; while(!feof($puffer)) { $puffer = fgets($file, 200); $gex = explode("|",$puffer); echo('<a href="'); ...

Antwort
Alt 21.03.06, 17:39   #1 (permalink)
 
Registriert seit: 24.10.05
Blacki Leistung: Facit NTK
Likes: 0
Standard Frage: SChleife dauert zu lange

Anzeige

Code:
<?php
$file = fopen("bilder.list","r");
$i = 0;
while(!feof($puffer))
{
$puffer = fgets($file, 200);
$gex = explode("|",$puffer);
echo('<a href="');
echo($gex[$i]);
echo('">Bild ');
echo(" $i<br>");
$i++;
}


?>
Der Code klappt nicht, die Seite läd immer weiter.


Warum?

EDIT nach einer zeit kommt:Warning: feof(): supplied argument is not a valid stream resource in /home/www/freehosting/32305/htdocs/protect/bilder.php on line 4
Bild 0
Blacki ist offline   Mit Zitat antworten
Alt 21.03.06, 17:40   #2 (permalink)
 
Registriert seit: 26.11.05
meadow Leistung: Facit NTK
meadow eine Nachricht über ICQ schicken
Likes: 0
Standard

$puffer = fgets($file, 200);
wird jedes mal neu in der schleife initialisiert, mit dem selben wert

zu deinem edit:
$puffer ist beim 1. aufruf noch NULL
meadow ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 21.03.06, 17:41   #3 (permalink)
Themenstarter
 
Registriert seit: 24.10.05
Blacki Leistung: Facit NTK
Likes: 0
Standard

Wie kann ich es am besten beheben???
Blacki ist offline   Mit Zitat antworten
Alt 21.03.06, 17:45   #4 (permalink)
 
Registriert seit: 26.11.05
meadow Leistung: Facit NTK
meadow eine Nachricht über ICQ schicken
Likes: 0
Standard

vor der schleife das initialisieren oder eine abfrage die das nur beim 1. durchlauf macht.

programmieren = logisches kobinieren, konzentrier dich, dann passiert das nicht
meadow ist offline   Mit Zitat antworten
Alt 21.03.06, 17:45   #5 (permalink)
Themenstarter
 
Registriert seit: 24.10.05
Blacki Leistung: Facit NTK
Likes: 0
Standard

Zitat:
Original von meadow
vor der schleife das initialisieren oder eine abfrage die das nur beim 1. durchlauf macht.

programmieren = logisches kobinieren, konzentrier dich, dann passiert das nicht
Thx
Blacki ist offline   Mit Zitat antworten
Alt 21.03.06, 17:48   #6 (permalink)
 
Registriert seit: 26.11.05
meadow Leistung: Facit NTK
meadow eine Nachricht über ICQ schicken
Likes: 0
Standard

bitte gerne, melde dich ruhig wieder wenn du ein problem mit dem alorythmus hast.

konzentiert durchgehen und evtl. aufzeichnen so findet man solche fehler
meadow ist offline   Mit Zitat antworten
Alt 21.03.06, 21:07   #7 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Zitat:
$puffer = fgets($file, 200);
wird jedes mal neu in der schleife initialisiert, mit dem selben wert
Warum sollte das passieren? Der Interne Zeiger wird jedes mal um eins erhöht, somit bekommst Du immer eine Zeile aus der Datei.
Es liegt daran, dass feof() ein gültiges Dateihandle braucht und keine Variable!!

Also so:

PHP-Code:

$file 
fopen("./test.txt","r");

while(!
feof($file)) // $file hat evtl. ein gültiges Dateihandle
{
        
//$puffer hat nur den Wert 
    
$puffer fgets($file4096);
    echo 
$puffer,"<br/>";

man könnte es aber auch so machen:

PHP-Code:
<?php

if($file = @fopen("./test.txt","r"))
{
    while(
$puffer fgets($file4096))
    {
        echo 
$puffer,"<br/>";
    }
}
else
{
    echo 
"Die Datei konnte nicht ge&ouml;ffnet werden!";
}
?>
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 22.03.06, 13:44   #8 (permalink)
 
Registriert seit: 26.11.05
meadow Leistung: Facit NTK
meadow eine Nachricht über ICQ schicken
Likes: 0
Standard

[QUOTE]
Zitat:
Original von BasicAvid
Zitat:
$puffer = fgets($file, 200);
wird jedes mal neu in der schleife initialisiert, mit dem selben wert
Warum sollte das passieren? Der Interne Zeiger wird jedes mal um eins erhöht, somit bekommst Du immer eine Zeile aus der Datei.
ich hab da ein kleines verständnispriblem
macht das die funktion automatisch?
meadow ist offline   Mit Zitat antworten
Alt 22.03.06, 14:12   #9 (permalink)
 
Registriert seit: 17.01.06
phx1024 Leistung: Facit NTK
Likes: 0
Standard

$file ist ein pointer auf eine geöffnete datei, und bei funktionen die mit hilfe dieser pointer daten lesen (hier fgets) wird dieser pointer vorwärts geschoben, so das beim nächsten aufruf der funktion ab dieser stelle weiter gelesen wird.
wenni ch mich recht erinnere liest fgets so wie es hier aufgerufen wird, die aktuelle zeile bis zum 200. Zeichen, oder wenn vorher ein EOL kommt bis zu diesen.
Stell dir vor das File ist ein Buch, und $File ist dein Finger, wenn fgets die sagt: "Gibt mir die nächste Zeile, aber nur bis zu 200 Zeichen" dann liest du dem fgets die Zeile bis zum 200. Zeichen vor, und wartest da mit deinem Finger bis dir wieder was gesagt wird.
In diesem Script wird dir immer wieder von fgets das selbe gesagt, und das bis du auf der letzten seite des buches bist. das sieht die Whileabrage dann an deinem Finger, und sagt dir du sollst das Buch zumachen ;-)

Grüße phx1024

P.S.: nit falsch verstehen wenn ich das so erkläre, ich verwende nur sehr gern analogien ;-)
phx1024 ist offline   Mit Zitat antworten
Alt 22.03.06, 14:31   #10 (permalink)
 
Registriert seit: 26.11.05
meadow Leistung: Facit NTK
meadow eine Nachricht über ICQ schicken
Likes: 0
Standard

danke jetzt habe ichs xD
meadow ist offline   Mit Zitat antworten
Alt 22.03.06, 18:24   #11 (permalink)
 
Benutzerbild von BasicAvid
 
Registriert seit: 17.03.04
BasicAvid Leistung: Facit NTK
Likes: 2
Standard

Zitat:
mich recht erinnere liest fgets so wie es hier aufgerufen wird, die aktuelle zeile bis zum 200. Zeichen
Nicht ganz, der Wert gibt nicht die Zeichen an sondern die Bytes die gelesen werden!
__________________
Mfg Basic Avid
- Use it or be used! -
BasicAvid ist offline   Mit Zitat antworten
Alt 24.03.06, 08:01   #12 (permalink)
 
Registriert seit: 17.01.06
phx1024 Leistung: Facit NTK
Likes: 0
Standard

Für mich gilt
1 Char = 1 Byte
kann sein das das bei Java mit unicode anders ist,
und das es bei PHP vieleicht auch Unicode-kram gibt,
aber ich progge in C und C++ und da stimmt das,
wenn ich nen Zeilenumbruch aus MS-Text hab, ist das enter nu mal
2 Zeichen groß.

grüße phx1024
phx1024 ist offline   Mit Zitat antworten
Alt 24.03.06, 13:33   #13 (permalink)
 
Registriert seit: 06.04.05
adrian90 Leistung: Facit NTK
Likes: 0
Standard

Unicode braucht 4 Bytes für ein Zeichen. Und der Zeilenumbruch in Windows ist ja so: \r\n. Darum 2 Zeichen
adrian90 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Frage: SChleife dauert zu lange
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[SQL] Abfrage dauert zu lange MrSpider Code Kitchen 4 22.08.09 15:05
Hochfahren dauert zu lange gugugs Die Problemzone 32 29.03.07 20:46
Reperatur dauert zu lange MJK Off topic-Zone 2 02.07.05 00:48
Wie lange dauert es ... Slude Internet Allgemein 2 30.06.04 21:45
Runterfahren dauert zu lange 1093130 Hardware Probleme 11 23.05.02 00:51


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61