Toon posts:

[PHP] File regel voor regel behandelen gaat fout

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil uit een m3u file regel voor regel de mp3's eruit vissen en doe dat met het volgende script:
PHP:
1
<?$fd = fopen ("$filename", "r"); //m3u openenwhile ($fd) {$string = fgets($fd, 4096);$explode = explode("\\",$string); //string slopen$aantal = count($explode); //kijken hoe groot de array is$num = $aantal - 1; //laatste array nemen$track = $explode[$num]; //nummer = laatste arrayecho "$track<br>\n"; //nummer op scherm dumpen}fclose ($fd); //m3u sluiten?>

Meer kheb nu 1 probleem, zodra alle regel al op het scherm staan, blijft íe laden en geeft íe een time-out op de volgende regel:
PHP:
1
<?$string = fgets($fd, 4096);?>

Wat is er mis, ik heb al op php.net gekeken en gesearch, maar kom er niet uit :(

Jullie wel?

alvast bedankt :)

Verwijderd

Je controleert de EoF volgens mij niet.

als ik het goed heb moet je idt er van maken:
PHP:
1
<?while (!eof($fd)){// code}?>

  • Erik Jan
  • Registratie: Juni 1999
  • Niet online

Erik Jan

Langzaam en zeker

Kijk eens naar
PHP:
1
<?while ($fd) {?>

//Edit: damn die 2 seconde :)

This can no longer be ignored.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op woensdag 22 mei 2002 23:26 schreef delighteddennis het volgende:
Je controleert de EoF volgens mij niet.

als ik het goed heb moet je idt er van maken:
PHP:
1
<?while (!eof($fd)){// code}?>
Bijna ...
code:
1
while (!feof ($fd))

staat ook gewoon op php.net trouwens.

Verwijderd

Topicstarter
oke, thanx, kben er uit, was dus een klein foutje :P

/e inderdaad, khad hem er een keer per ongeluk uitgehaald zie ik net :P
doordat ik het eerst helemaal fout had zat ik maar wat aan te kloten en was de code een beetje verneukt, sorry ;)

  • wiho
  • Registratie: Februari 2000
  • Laatst online: 09:43

wiho

Certified Nerd

Vervang
PHP:
1
<?while ($fd) {$string = fgets($fd, 4096);?>

door
PHP:
1
<?while ($string = fgets($fd, 4096)) {?>

edit:

OK, beetje late reactie (anderhalve minuut ofzo :P), maar wel korter dan eof-checks.

"Pas als het proces gecrashed is, dumpt men de core"


Verwijderd

Topicstarter
Op woensdag 22 mei 2002 23:29 schreef wiho het volgende:
Vervang
PHP:
1
<?while ($fd) {$string = fgets($fd, 4096);?>

door
PHP:
1
<?while ($string = fgets($fd, 4096)) {?>
done that, ut werkt nog steeds, maar was het nut pcies daarvan? :P

  • wiho
  • Registratie: Februari 2000
  • Laatst online: 09:43

wiho

Certified Nerd

Op woensdag 22 mei 2002 23:30 schreef Schum1 het volgende:
done that, ut werkt nog steeds, maar was het nut pcies daarvan? :P
't nut? Dat 'ie uit de while-lus springt zodra fgets niets meer kan lezen. Iets als while($fp) heeft geen zin, omdat de waarde van $fp in je lus niet verandert, en dus altijd true blijft.

"Pas als het proces gecrashed is, dumpt men de core"


Verwijderd

Topicstarter
Op woensdag 22 mei 2002 23:32 schreef wiho het volgende:

[..]

't nut? Dat 'ie uit de while-lus springt zodra fgets niets meer kan lezen. Iets als while($fp) heeft geen zin, omdat de waarde van $fp in je lus niet verandert, en dus altijd true blijft.
aha, ik snap, dit is dus om tegen te gaan dat íe als maar in een lus blijft zitten?

thanx! na kan ik weer verder php'en :P

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10:35
Niemand zit er op te wachten, maar toch nog even mijn code suggestie:
code:
1
2
sub display($item) { echo array_pop(explode("\\",$item)."<br>\n"; } 
array_map("display",file($filename));

Higher order programming O+

Jammer dat dit in PHP net wat minder efficient werkt (maar 't is wel kort!)

  • tomato
  • Registratie: November 1999
  • Niet online
Soultaker: Jammer dat dit in PHP net wat minder efficient werkt
En dat PHP geen subs maar functions kent :X ;)
(maar 't is wel kort!)
Je wilde hier naartoe he?
code:
1
map{/([^\\]*)$/;print"$1<br>"}<>;

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 09-08 19:19
Ok, misschien een beetje laat. Maar files regel voor regel inlezen gaat echt zwaar simpel in php hoor ;)
Vanaf http://nl.php.net/file:

file

(PHP 3, PHP 4 >= 4.0.0)

file -- Reads entire file into an array

Description

array file ( string filename [, int use_include_path])

Identical to readfile(), except that file() returns the file in an array. Each element of the array corresponds to a line in the file, with the newline still attached.

Opmerking: Each line in the resulting array will include the line ending, so you still need to use trim() if you do not want the line ending present.

You can use the optional second parameter and set it to "1", if you want to search for the file in the include_path, too.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 10:35
Op donderdag 23 mei 2002 00:58 schreef tomato het volgende:
En dat PHP geen subs maar functions kent :X ;)
Oops. =)
Je wilde hier naartoe he?
code:
1
map{/([^\\]*)$/;print"$1<br>"}<>;
Inderdaad; da's een mooie regel! Natuurlijk kost het openen en sluiten van je bestand nog wel wat extra code.
Op donderdag 23 mei 2002 01:13 schreef freak007 het volgende:
Ok, misschien een beetje laat. Maar files regel voor regel inlezen gaat echt zwaar simpel in php hoor ;)
Het nadeel van file() is wel dat eerst het hele bestand in z'n geheel in het geheugen geladen wordt, voordat er iets mee gedaan wordt. Soms is het dus wenselijk om regel voor regel uit te lezen, zodat er een zekere beperking op het geheugengebruik zit. Ook wil je in principe je I/O en CPU acties liever niet scheiden, zoals met file() gebeurd.

In de meeste situaties is 't echter gewoon 'n handige functie.

  • wiho
  • Registratie: Februari 2000
  • Laatst online: 09:43

wiho

Certified Nerd

Op donderdag 23 mei 2002 01:44 schreef Soultaker het volgende:
code:
1
map{/([^\\]*$/;print"$1<br>"}<>;

... Natuurlijk kost het openen en sluiten van je bestand nog wel wat extra code.
Drie keer raden wat <> doet... ;)

Perl... O+

"Pas als het proces gecrashed is, dumpt men de core"

Pagina: 1