Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] - Ulepszenie funkcji wyszukującej, Dodanie RegEXP
Adi32
post 18.07.2012, 15:20:03
Post #1





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Witajcie.

Zrobiłem sobie kiedyś funkcję, która przeszukuje wszystkie pliki z katalogu w którym się znajduje i podrzędne w poszukiwaniu danej frazy,
po czym zwraca url do pliku, linie i wiersz. Jest przeogromnie przydatna szczególnie gdy pracuje się z obcym kodem.

W pewnym projekcie zostały naniesione zmiany w bazie danych, konkretnie w tabeli `config`.

Stara struktura czyli
id | wartosc
1 | To jest tytuł strony //tytuł
2 | Bardzo fajna strona // opis (description)
itd.

Nowa struktura:
key | value
title | To jest tytul
itd.

Rekordów jest sporo, projekt też nie mały, a zadaniem jest teraz poodmieniać wszystkie każde użycie klasy config z:
Config::get(1)
na
Config::get('title')

Tak na prawdę to trzeba tylko znaleźć wszystkie użycia metody Config::get() gdzie parametrem jest INT i zamienić na $c->title, $c->description itd;

Ten problem nasunął mi pomysł nadpisania funkcji, na pewno przyda się jeszcze w innych przypadkach.

Chyba nie ma sensu wklejać całej funkcji szukającej...

  1. <?
  2. if (stripos(file_get_contents($sciezka . $plik), $szukany_ciag) !== false) {
  3.  
  4. if ($linie = @file($sciezka . $plik)) {
  5.  
  6. foreach ($linie as $linia => $tresc) {
  7.  
  8. if ($pozycja = stripos($tresc, $szukany_ciag)) {
  9.  
  10.  
  11. ?>
  12. <tr title="<?=htmlspecialchars(trim($tresc))?>">
  13. <td><?= $sciezka ?><strong><?= $plik ?></strong></td>
  14. <td><?= ($linia + 1) ?></td>
  15. <td><?= $pozycja ?></td>
  16. </tr>
  17. <?
  18. flush();
  19. }
  20. }
  21. }
  22. }
  23. ?>


Chciałbym móc użyj jej w mniej więcej taki sposób:

  1. Config->get(/[0-9]?/)


Czy istnieje możliwość wprowadzenie do PHPowej wyszukiwarki wyrażeń regularnych?

Ten post edytował Adi32 18.07.2012, 15:47:34


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
peter13135
post 18.07.2012, 21:32:13
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


Ale w czym konkretnie masz problem ?

Z tego co widzę, ten kawałek kodu szuka w której linii znaleziono "pociąg". Nie wiem jednak po co ten kod wkleiłeś... bo przecież Ciebie teraz to nie interesuje, po prostu chcesz zamienić pewien fragment kodu na inny fragment. Do tego możesz użyć preg_match().

A skoro masz strukturę plików (pewnie w jakiejś tablicy) to robisz pętlę i każdy plik traktujesz tą funkcją.

Mam wrażenie, że to co napisałem jest dla Ciebie oczywiste, więc może napiszesz dokładniej w czym problem ?

Ten post edytował peter13135 18.07.2012, 21:37:38


--------------------
:)
Go to the top of the page
+Quote Post
Adi32
post 18.07.2012, 21:49:05
Post #3





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Cytat(peter13135 @ 18.07.2012, 22:32:13 ) *
Ale w czym konkretnie masz problem ?

Z tego co widzę, ten kawałek kodu szuka w której linii znaleziono "pociąg". Nie wiem jednak po co ten kod wkleiłeś... bo przecież Ciebie teraz to nie interesuje, po prostu chcesz zamienić pewien fragment kodu na inny fragment. Do tego możesz użyć preg_match().

A skoro masz strukturę plików (pewnie w jakiejś tablicy) to robisz pętlę i każdy plik traktujesz tą funkcją.

Mam wrażenie, że to co napisałem jest dla Ciebie oczywiste, więc może napiszesz dokładniej w czym problem ?

Ano jest to oczywiste.
Mam wyszukiwarke, szuka w we wszystkich plikach PHP wpisanego ciągu. Chciałbym w tej wyszukiwarce uwzględnić wyrażenia regularne.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
peter13135
post 18.07.2012, 22:09:22
Post #4





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


No to wyrażenie regularne w Twoim przypadku może być takie :
  1. <?php
  2.  
  3. $str = '
  4. <?php
  5.  
  6. echo \'lubię placki\';
  7. Config::get(1);
  8. $trolololo = Config::get(2);;
  9. ?>
  10. ';
  11. preg_match_all('#(Config::get\(\d+\))#', $str, $matches);
  12.  
  13. print_r($matches);
  14. ?>


--------------------
:)
Go to the top of the page
+Quote Post
Adi32
post 19.07.2012, 08:33:01
Post #5





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Nie dokładnie o to chodziło, w każdym razie rozwiązanie było proste i funkcja działa doskonale.

Jeżeli ktoś byłby nią zainteresowany to mogę się podzielić.

Funkcjonalność to po prostu przeszukanie wszystkich plików na serwerze i ich zawartości w poszukiwaniu danej frazy z możliwością używania wyrażeń regularnych.
+ zabezpieczenie hasłem, ograniczenie do konkretnego rozszerzenie, sprecyzowanie miejsca wyszukiwania.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
wNogachSpisz
post 19.07.2012, 10:40:03
Post #6





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


Czy istnieje szczególny powód dla którego chcesz to robić z poziomu PHP?
Każdy szanujący się edytor tekstowy ma taką funkcję.

Ten post edytował wNogachSpisz 19.07.2012, 10:40:37
Go to the top of the page
+Quote Post
Adi32
post 19.07.2012, 11:10:10
Post #7





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Już wyjaśniam.

Jak napisałem wcześniej, przydaje się w przeszukiwaniu obcego kodu.
W mojej firmie jest przymus pracy z PsPadem, który nie posiada takich opcji.
Mimo wszystko korzystam z NetBeansa ale żeby przeszukiwać pliki na obcym serwerze muszę najpierw przeprowadzić integrację co trwa dość długo, jest bez sensu jeżeli trzeba zmienić jedną rzecz w jednym pliku, a co najgorsze NetBeans ma buga który przy takiej integracji losowo kasuje pliki na serwerze.
Dlatego czasami lepiej jest wrzucić na serwer jeden plik i odpalić.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
irmidjusz
post 19.07.2012, 16:34:45
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


Cytat(Adi32 @ 19.07.2012, 12:10:10 ) *
W mojej firmie jest przymus pracy z PsPadem


?!?!?!?!?!?
niech mnie ktoś uszczypnie, bo chyba śnię...

owszem, uważam PSPad za super edytorek, znacznie lepszy od jakichkolwiek innych tego typu małych, podręcznych programików (bije notatnik++ na głowę), szczególnie z uwagi na dostępność mnóstwa gotowych, świetnych rozszerzeń do niego i możliwość łatwego pisania własnych w javascript albo visual basicu,

ale

Cytat(Adi32 @ 19.07.2012, 12:10:10 ) *
W mojej firmie jest przymus pracy z PsPadem


WTF!? biggrin.gif


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
Adi32
post 19.07.2012, 17:45:06
Post #9





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


http://forum.php.pl/index.php?showtopic=20...t=0&start=0


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
redeemer
post 19.07.2012, 17:54:41
Post #10





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Jeżeli zdalny serwer o którym piszesz stoi na Linuksie albo innym w miarę zgodnym z POSIX i masz dostęp przez ssh to możesz użyc dostępnych tam narzędzi, które będą wydajniejsze od skryptu PHP. Zresztą, jak możecie mieć coś na zdalnym serwerze a nie mieć tego lokalnie? Jak się wysypie wam serwer razem z backupem (zakładając, że macie takowy), to co? Klepanie od nowa?


--------------------
Go to the top of the page
+Quote Post
Adi32
post 20.07.2012, 07:01:33
Post #11





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Cytat(redeemer @ 19.07.2012, 18:54:41 ) *
Jeżeli zdalny serwer o którym piszesz stoi na Linuksie albo innym w miarę zgodnym z POSIX i masz dostęp przez ssh to możesz użyc dostępnych tam narzędzi, które będą wydajniejsze od skryptu PHP. Zresztą, jak możecie mieć coś na zdalnym serwerze a nie mieć tego lokalnie? Jak się wysypie wam serwer razem z backupem (zakładając, że macie takowy), to co? Klepanie od nowa?

Nie mi to trzeba tłumaczyć... A co do wydajności to też nie narzekam, skrypt nigdy nie szukał dłużej niż kilka sekund.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post
d3ut3r
post 20.07.2012, 08:22:41
Post #12





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Trochę offtopując, ktoś wspomniał o Bugu w NB kasującym pliki przy synchronizacji. Jest gdzieś to na bug tracku ? bo kurcze ostatnio mi poginęły pliki projektu i się zastanawiałem gdzie leży problem smile.gif

Co do samego tematu, narzędzie jak narzędzie jednym się przyda innym nie. Oczywiście fajnie jest mieć dostęp przez ssh jednak nie zawsze jest to możliwe. Z drugiej strony brak kopii lokalnej może być przyczyną ekstremalnych przygód smile.gif (jak @redeemer wspomniał, padnięcie serwera i po projekcie).


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
Adi32
post 20.07.2012, 09:12:16
Post #13





Grupa: Zarejestrowani
Postów: 348
Pomógł: 26
Dołączył: 8.10.2008
Skąd: Lublin

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


Było gdzieś coś, nawet pisali, że w nowej wersji buga już nie ma. Ale to nie prawda, NB i tak kasuje pliki.


--------------------
Wolałem języki z rodziny C ale poszedłem na łatwizne...
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 20:14