Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> preg_match lub coś podobnego.
UNK
post
Post #1





Grupa: Zarejestrowani
Postów: 93
Pomógł: 5
Dołączył: 30.04.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


Witam, mam pewien problem natury szybkości działania tongue.gif

Chodzi bowiem o to, iż posiadam na dysku pewien plik o wielkości ~234k i ilości ważnych dla mnie linii/wszystkich 9566/9572.
W linuksie jest komenda cat (wyświetlająca zawartość pliku ) oraz grep ( wyświetlająca linie z wybranym wzorcem ) całość zajmuje maksymalnie 0.02 s ( wykonane przez exec() ) gdy załadowanie pliku do zmiennej tablicowej zajmuje skryptowi ~1.5 s + skrypt porównujący ciąg znaków 0.5-1.0 s więc całość wydłuża się do maksymalnie 2.5-3 s w zależności od obciążenia w danym momencie.

Zawartość pliku to nic innego jak zapis 6 znaków a następnie nazwy firmy, przykładowo:
000000 Xerox
00026A Cocess Telecom Co.
000FCA A-jin Techline CO

Dla niewtajemniczonych pierwsze 6 znaków jest to początek adresu MAC karty sieciowej ( bez odstępów typu - lub : ), i nazwa firmy która ją wyprodukowała.

Oczywiście nasuwa się od razu myśl dlaczego nie zostanę przy wykonaniu polecania przez exec(); chciałbym aby skrypt działał w pełni w PHP, ale też żeby działał szybko tongue.gif
Dlatego pytanie, czy może aby jest coś podobnego w PHP czego jeszcze nie znam, ale nie znam takiej zasady działania funkcji, umożliwiająca szybkie pobranie danych z pliku i porównanie z czymś zawartym w bazie danych.

Z góry dziękuję i przepraszam, jeśli powtórzyłem temat, ale nie znalazłem nic podobnego do tego winksmiley.jpg


I dla ciekawskich, może nie najlepsze rozwiązanie skryptu, ale nie chciało mi się nad tym długo myśleć winksmiley.jpg

  1. <?php
  2. $fn = '/usr/share/nmap/nmap-mac-prefixes';
  3. $f = fopen( $fn, "r" );
  4. $zp = fread( $f, filesize( $fn ) );
  5. $line = split( "\n", $zp );
  6.  
  7. foreach ( $line as $ki => $val )
  8. {
  9. if ( preg_match( '/'.substr( $_GET['mac'], 0, 8 ).'/si', substr( $val, 0, 2 ).":".substr( $val, 2, 2 ).":".substr( $val, 4, 2 ) ) )
  10. {
  11. $opism = substr( $val, 6, 255 );
  12. break;
  13. }
  14. }
  15. ?>


I to samo z wykorzystaniem systemu Linux :-)
  1. <?php
  2. $opism = exec( 'cat /usr/share/nmap/nmap-mac-prefixes |grep '.substr( $_GET['mac'], 0, 2 ).substr( $_GET['mac'], 3, 2 ).substr( $_GET['mac'], 6, 2 ) );
  3. ?>
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 07:15