Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 23.08.2012 Ostrzeżenie: (0%)
|
Witam serdecznie.
Mam prosty skrypt, który ma wyszukać w podanym pliku(stronie) wyrażenie(w tym wypadku wzorzec adresu mail) i zapisanie ich do nowo utworzonego pliku. Zrobiłem pętlę w której ma przeszukiwać plik linia po linii, no i nie ma efektu. Kombinowałem na różne sposoby. Gdzie robię błąd? CODE function zdobadz_email($strona) { $sprawdz = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}$/'; //$sprawdz = '/^(aaa)$/'; $plik = fopen($strona,'r'); $moj_plik = fopen('tymczasowy_index.txt','a'); flock($moj_plik, 2); while(!feof($plik)) { $linia = fgets($plik); if ( preg_match_all($sprawdz, $linia, $wynik)) { file_get_contents($moj_plik, $wynik); fputs ($moj_plik, $wynik); } } fclose($plik); rewind($moj_plik); $adresy = file('tymczasowy_index.txt'); $adres = "tchoman@poczta.onet.pl"; $tytul = "Adresy e-mail"; $wiadomosc = ("Znalezione adresy e-mail to: $adres"); mail($adres, $tytul, $wiadomosc); flock($moj_plik, 3); fclose($moj_plik); //unlink($moj_plik); } ?> |
|
|
|
![]() |
Post
#2
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 23.08.2012 Ostrzeżenie: (0%)
|
Witam ponownie.
Po zabawach ze skryptem z pierwszego postu, wykombinowałem takie coś, potraktowałem to funkcją "serialize" i działa tak jak powinno. Szuka zadanego 'regexp' i wpisuje do pliku tak jak trzeba: Tak wygląda teraz kod: CODE function zdobadz_email() { $sprawdz = '/[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]{2,4}/'; $plik = fopen('testowy.txt','r'); $moj_plik = fopen('maile.txt','w+'); flock($moj_plik, 2); $plik = file('testowy.txt') or die('Wystąpił błąd.'); echo '<ul>'; foreach($plik as $linia) { if(preg_match_all($sprawdz, $linia, $wynik)); $wynik = serialize($wynik); fputs($moj_plik, $wynik); echo '<li>'.$linia.'</li>'; } echo '</ul>'; flock($moj_plik, 3); fclose($moj_plik); //unlink($moj_plik); } zdobadz_email(); zamiast 'foreach' to samo uzyskałem za pomocą 'while' tu fragment kodu: CODE while(!feof($plik)) { $linia = fgets($plik); preg_match_all($sprawdz, $linia, $wynik); $wynik = serialize($wynik); fputs($moj_plik, $wynik); } Teraz mam inne pytanie, funkcja 'serialize' wpisuje mi do pliku znalezione 'regexp' w formie tablicy, wygląda to tak: a:1:{i:0;a:1:{i:0;s:22:"tchoman@poczta.onet.pl";}}a:1:{i:0;a:1:{i:0;s:10:"dd@dcc.com";}}a:1:{i:0;a:1:{i:0;s:16:"kxkxkx@lxlxlx.pl";}} a ja bym chciał żeby skrypt wpisał to do pliku .txt w postaci stringa -tchoman@poczta.onet.pl -dd@dcc.com" -kxkxkx@lxlxlx.pl jak przerobić kod? Witam ponownie Z powyższym już też sobie poradziłem, a mianowicie tak: CODE if(preg_match($sprawdz, $linia, $wynik)); { //$wynik = serialize($wynik); $wynik = implode(",", $wynik); //z 'preg_match' wywaliłem 'all' i wtedy za 'serialize' da się wykorzystać 'implode' fputs($moj_plik, $wynik); // i wtedy ładnie zapisuje do .txt string } echo '<li>'.$linia.'</li>'; Ale pojawia się mały problem, 'include' jako 1 paramert może dostać separator, ja bym chciał żeby każdego 'regexp' wpisało do nowego wiersza, ale w tym przypadku nawet zwykły "-" nie działa, niezależnie jaki separator próbuję wpisać dalej wyświetla wszystko w ciągu bez separacji. Jak prawidłowo to zrobić ? Edit: I z tym sobie poradziłem, trzeba tak to wpisać $wynik = implode($wynik)."\r\n"; Ale swoją drogą wie ktoś dlaczego separator w 'implode' nie zadziałał? Ten post edytował tchoman 12.09.2012, 19:06:07 |
|
|
|
tchoman [PHP] Wyszukanie wyrażenia regularnego i zapis do pliku 11.09.2012, 10:24:59
jacobson A ta zmienna strona to jest adres strony ?
Sprobu... 11.09.2012, 10:48:02
tchoman Najpierw dla uproszczenia $strona to zwykły p... 11.09.2012, 10:52:28
jacobson Sprawdz czy na pewno wchodzi Ci do warunku if z pr... 11.09.2012, 11:00:07
viking Inna sprawa że to nie jest poprawny regexp dla mai... 11.09.2012, 11:06:51
tchoman Wzorzec wyrażenia jest prawidłowy bo na innym skry... 11.09.2012, 11:12:32
jacobson a czy sprawdziles czy na pewno wchodzi do tego if-... 11.09.2012, 11:34:59 ![]() ![]() |
|
Aktualny czas: 27.12.2025 - 18:45 |