Skocz do zawartości

funkcja przeszukująca plik


piotreek

Rekomendowane odpowiedzi

witam

napisałem funkcję przeszukującą plik txt,

czy można ją jeszcze jakoś zoptymalizować aby działała szybciej, zużywała mniej zasobów, a może ktoś ma całkowicie inną funkcję? kod ma przeszukiwać pliki o rozmiarze ok 1mb, mój kod ma przeszukiwać kolejne linijkii i sprawdzić czy linijka jest taka sama jak szukany tekst

<? 
	 $plik = 'plik.txt';
	 $fp = fopen( $plik , 'r' );
	 $lock = flock($fp, 1);
	 if ($lock)
	 {
			 // jeśli udało się zablokować to szukamy
			 $blnFinded = FALSE;
			 while( $blnFinded == FALSE )
			 {
					 $mixLinia = fgets( $fp, 4096 );
					 $mixLinia = str_replace( array("\n", "\r\n", "\n\r", "\r"), '', $mixLinia );
					if( $mixLinia == 'szukanytekst')
					 {
							 $blnFinded = TRUE; // znaleziono 

					 }
					 elseif( feof( $fp ) )
					 {
							 // nie znaleziono
							 $blnFinded = TRUE;
					 }
			 }
			 flock($fp,3);
	 }
	 fclose( $fp );
?>

foot.gif

Programista PHP / sql www.grzelka.info

Odnośnik do komentarza
Udostępnij na innych stronach

<?php
$dane=file('plik.txt');
function zmien (&$element) {$element=str_replace(array("\r","\n"),'',$element);}
array_walk ($dane,'zmien');
if (in_array('szukanytekst',$dane)) echo 'Znalezione'; else echo 'Nie znaleziono';
?>

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Odnośnik do komentarza
Udostępnij na innych stronach

czy wczytanie całego pliku nie zabardzo obciąży serwer?
Faktycznie, większe zużycie pamięci. Za to wykonanie skryptu jest inne.

Twoje rozwiązanie:

Requests per second: 1.01 [#/sec] (mean)

Time per request: 989.791 [ms] (mean)

Moje rozwiązanie:

Requests per second: 1.44 [#/sec] (mean)

Time per request: 695.769 [ms] (mean)

Twoje rozwiązanie po zmianach:

Requests per second: 1.23 [#/sec] (mean)

Time per request: 810.851 [ms] (mean)

<?
	 $plik = '1.kod';
	 $fp = fopen( $plik , 'r' );
	 if (flock($fp, 1))
	 {
			 // jeśli udało się zablokować to szukamy
			 $blnFinded = FALSE;
			 while( $blnFinded == FALSE && !feof( $fp ))
			 {
					 $mixLinia = fgets( $fp, 4096 );
					 $mixLinia = str_replace( array("\n","\r"), '', $mixLinia );
					if( $mixLinia == 'szukanytekst')
					 {
							 $blnFinded = TRUE; // znaleziono
					 }

			 }
			 flock($fp,3);
	 }
	 fclose( $fp );
?>

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Odnośnik do komentarza
Udostępnij na innych stronach

To znowu ja :unsure:

Twój skrypt okrojony chyba do minimum :D

Requests per second: 1.34 [#/sec] (mean)

Time per request: 746.814 [ms] (mean)

<?
$fp=fopen('plik.txt,'r');
$blnFinded=FALSE;
while($blnFinded==FALSE && !feof($fp))
{
 if(str_replace(array("\n","\r"),'',fgets($fp,4096))=='szukanytekst') $blnFinded=TRUE;
}
fclose($fp);
?>

Nie znam się na pozycjonowaniu, ja tu tylko zużywam transfer i miejsce w sql.

Roman Kluska ujawnia: nadchodzi INFLACYJNY ARMAGEDON!

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności