ďťż

[php] fgets - zasada działania

       

Podstrony


telcocafe

Mam pytanie odnośnie funkcji fgets. W manualu na php.net nic nie znalazłem więc może ktoś z forumowiczów będzie wiedział.
1. Czy funkcja fgets() zapisuje sobie gdzieś na boku jaką porcję danych pobrała ? Jeśli tak to jaką funkcją można uzyskać tę informację lub zmienną ? Czy może jedynym wyjściem jest po prostu użycie strlen() podając jako argument to co zwróciła funkcja fgets ?
2. Czy funkcja fgets() na prawdę pobiera kolejne linie pliku czy może wczytuje ten plik do czegoś w rodzaju tablicy (bo taka prawdziwa tablica jak w przypadku file() to raczej na pewno nie powstaje, a przynajmniej programista nie ma do niej dostępu) i po prostu zwraca kolejno jej elementy ? W przypadku małych plików to bez znaczenia, ale jeśli operujemy na wieloliniowym pliku i potrzebujemy wczytać kilka pierwszych linijek to wtedy istotne jest jak funkcja realizuje swoje zadanie. Bo jeśli działa równie długo co użycie file() to czasem lepsze jest to drugie rozwiązanie.



Działa dokładnie tak jak fread, tylko że nie zwraca określonych porcji danych (np 512 bajtów) tylko w porcjach od początku do końca linii.

nie wyjaśniło to ani jednej kwestii z mojego pierwszego posta :/

1. Przecież fgets pobiera n bajtów od położenia kursora w uchwycie i zwraca je, więc w czym problem?
2. Jeszcze raz - fgets zwraca n bajtów, a nie żadną tablicę. Ty możesz sobie zrobić jakąś tablicę. Jeśli chcesz sprawdzić, czy wystąpił koniec linii, sprawdzasz to substr. Żadna filozofia.




1. Przecież fgets pobiera n bajtów od położenia kursora w uchwycie i zwraca je, więc w czym problem? fgets pobiera linię z pliku i zwraca ją jako wynik funkcji (chyba, że użyjemy dodatkowych argumentów to wtedy albo tyle bajtów ile podamy lub do końca lini, zależy co pierwsze). To wiem, ale ów linia pliku może mieć różną długość i pytam czy funkcja zapisuje to sobie gdzieś na boku ile danych pobrała i czy jest funkcja (lub inny sposób ) która te dane udostępnia (bo są funkcje które wyświetlają informacje na temat ostatniego wykonania innej funkcji np. w mysql), czy trzeba to sprawdzić samemu poprzez np. użycie strlen podając jako argument to co zwróciła funkcja fgets. Pytam o to ponieważ pierwsze rozwiązanie działałoby szybciej niż w drugim przypadku (funkcja strlen), a jeśli jest to często wykonywana operacja to czas wykonywania skryptu niepotrzebnie wzrasta.

andrzej_aa:

2. Jeszcze raz - fgets zwraca n bajtów, a nie żadną tablicę.
oggylwiatko:

czy może wczytuje ten plik do czegoś w rodzaju tablicy (bo taka prawdziwa tablica jak w przypadku file() to raczej na pewno nie powstaje
tytuł tematu:

fgets - zasada działania
Jak widać, miałem tu na myśli to jak funkcja realizuje swoje zadanie (co również zaznaczyłem w pierwszym poście), a nie efekt który widzimy. Bo o rezultacie działania funkcji to ja sobie mogę przeczytać w manualu, a jak zaznaczyłem na samym początku - pytam o to czego w manualu nie ma.
Użytkownik oggylwiatko edytował ten post 14 sierpień 2008, 21:24
Ech... Funkcja fgets przechowuje pozycję kursora w uchwycie. A w manualu jest coś niecoś. Poczytaj sobie o fseek i ftell.
Użytkownik andrzej_aa edytował ten post 14 sierpień 2008, 22:12
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.