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!

 

Wielki Elektronik

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!

 

Wielki Elektronik

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!

 

Wielki Elektronik

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