php problem

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/php_problem_92717/page_1 - zur Vollversion wechseln!


Ezekiel schrieb am 16.09.2003 um 21:13

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);


Ezekiel schrieb am 16.09.2003 um 21:18

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 schrieb am 16.09.2003 um 21:46

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 schrieb am 16.09.2003 um 23:35

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 schrieb am 17.09.2003 um 00:11

*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 schrieb am 17.09.2003 um 04:31

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 schrieb am 17.09.2003 um 07:36

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 schrieb am 17.09.2003 um 09:10

dankeschön. werds heute am nachmittag probieren :)


watchout schrieb am 17.09.2003 um 13:10

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 schrieb am 17.09.2003 um 14:17

die 1024 waren nur eine hausnummer fürs testen, grundsätzlich muss er bis zeilenende lesen und das sind eh viel weniger ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025