"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

php problem

Ezekiel 16.09.2003 - 21:13 594 9
Posts

Ezekiel

OC Addicted
Avatar
Registered: Jun 2001
Location: na
Posts: 3329
Ich habe ein Problem mit einem php script dass aus einer textdatei auslesen und das ergebnis in 2 variablen splitten sollte.
es erscheint keine fehlermeldung, die seite lädt einfach ewig.
wenn ich fgets gegen fread austausche tritt das problem nicht mehr auf aber das ergebnis auch nicht ;).
findet wer einen fehler ?

tia,
ezekiel

Code: PHP
$fp=fopen("bla.txt","r");
$data=fgets($fp,1024);
while(!feof($fp)) {
	list($bla1,$bla2)=split(",",$data,2);
	echo "$bla1";
	echo "$bla2";
	}
fclose($fp);
Bearbeitet von Ezekiel am 04.10.2003, 11:55

Ezekiel

OC Addicted
Avatar
Registered: Jun 2001
Location: na
Posts: 3329
hab die seite jetzt mal ca. 5 minuten laden lassen, mit dem ergebnis das die selbe zeile ca ~250-500 mal ausgegeben wurde?!
seltsam ...

PuhBär

Schau ned so genau
Avatar
Registered: Sep 2002
Location: .
Posts: 1228
wie gross ist die datei?

du liest mit fgets ja nur 1024byte aus
und innerhalb der while-schleife lest ja kan text mehr aus der datei aus, sprich feof wird nie eintreten

->

ich hätts so probiert:

while ( !feof($fp) )
{
list($bla1,$bla2)=split(",",$data,2);
echo "$bla1";
echo "$bla2";
}

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von PuhBär
wie gross ist die datei?

du liest mit fgets ja nur 1024byte aus
und innerhalb der while-schleife lest ja kan text mehr aus der datei aus, sprich feof wird nie eintreten

->

ich hätts so probiert:

while ( !feof($fp) )
{
list($bla1,$bla2)=split(",",$data,2);
echo "$bla1";
echo "$bla2";
}
also irgendwie is das das gleiche nomal :D

Ezekiel:
Du hast nur ein ganz kleines bissel falsch gmacht ;)
Code:
$fp=fopen("bla.txt","r");

while(!feof($fp))
{
  $data=fgets($fp,1024);
  list($bla1,$bla2)=split(",",$data,2);
  echo "$bla1";
  echo "$bla2";
}

fclose($fp);
so müssts eigentlich funken ;)

PuhBär

Schau ned so genau
Avatar
Registered: Sep 2002
Location: .
Posts: 1228
*huch*
yo, hast recht

hab des fgets vergessen

übrigens,
einfacher gehts mit:

$lines = file ('foo.bar');

$lines ist dann ein array mit jeweils 1 zeile als value

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von PuhBär
*huch*
yo, hast recht

hab des fgets vergessen

übrigens,
einfacher gehts mit:

$lines = file ('foo.bar');

$lines ist dann ein array mit jeweils 1 zeile als value
er braucht aber anscheinend genau 1024, und nicht \n als datensatztrennung... ;)

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
fgets() liest unter anderem auch bis \n

Code: PHP
foreach (file("bla.txt") as $line) {
  list($bla1, $bla2) = explode(",", $line, 2);
}

explode() waere in diesem fall split() vorzuziehen da split() eine regex erwartet, explode() nur einen literalen string (performance, wers braucht).

Ezekiel

OC Addicted
Avatar
Registered: Jun 2001
Location: na
Posts: 3329
dankeschön. werds heute am nachmittag probieren :)

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Zitat von Rektal
fgets() liest unter anderem auch bis \n
ist mir klar, aber es is trotzdem möglich, dass er eine 1024er begrenzung braucht, aber ihm is es ja völlig wurscht - er äussert sich auf solche sachen sowieso nicht...

btw: http://at.php.net/function.fgetcsv :p is speicherschonender als file() ... ;)

Ezekiel

OC Addicted
Avatar
Registered: Jun 2001
Location: na
Posts: 3329
die 1024 waren nur eine hausnummer fürs testen, grundsätzlich muss er bis zeilenende lesen und das sind eh viel weniger ;)
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz