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: 468 Pomógł: 36 Dołączył: 14.12.2010 Ostrzeżenie: (0%)
|
A ta zmienna strona to jest adres strony ?
Sprobuj moze za pomoca cUrl pobierac zawartosc strony i dopiro wtedy sprawdzaj tego maila. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 23.08.2012 Ostrzeżenie: (0%)
|
Najpierw dla uproszczenia $strona to zwykły plik .txt który stworzyłem ręcznie w tym samy katalogu i wpisałem kilka linijek tekstu, które odpowiadają wzorcowi (aby było co przeszukiwać).
CODE <?php require("szukaczmaila.php"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Szukacz adresów mail</title> </head> <body> <?php zdobadz_email("testowy.txt"); ?> <p>Wiadomość została wysłana</p> </body> </html> Wszystko na localhost |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 468 Pomógł: 36 Dołączył: 14.12.2010 Ostrzeżenie: (0%)
|
Sprawdz czy na pewno wchodzi Ci do warunku if z preg_matchem. Dodatkowo jedna wazna rzecz. preg_match_all zwraca tablice tak wiec jezeli juz znajdzie maila to powinienes wertowac w jakims foreachu np
nie sprawdzalem wyrazenia regularnego czy na pewno dziala. Najwazniejsze to sprawdz czy na pewno znajduje Ci maila na stronie. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 6 381 Pomógł: 1116 Dołączył: 30.08.2006 Ostrzeżenie: (0%)
|
Inna sprawa że to nie jest poprawny regexp dla maila.
|
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 13 Pomógł: 0 Dołączył: 23.08.2012 Ostrzeżenie: (0%)
|
Wzorzec wyrażenia jest prawidłowy bo na innym skrypcie działa. Zreszą próbowałem na prostym ciągu (aaa)
_all do preg_match to już moja kolejna wariacja wcześniej testowałem sam preg_match. Po prostu skrypt tworzy nowy plik (w tym przypadku 'tymczasowy_index.txt' ) ale nie zapisuje się do niego nic (jest pusty). Jedyny komunikat o błędzie to : Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\WyszukiwanieAdresowMail\szukaczmaila.php on line 46 ale to jeśli chodzi o wysłanie i nie powinno mieć znaczenia, bo jeśli wstawię tę część kodu odpowiedzialną za wysyłanie do komentarza to nic nie zmienia |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 468 Pomógł: 36 Dołączył: 14.12.2010 Ostrzeżenie: (0%)
|
a czy sprawdziles czy na pewno wchodzi do tego if-a ? wstaw sobie jakas zmienna testowa, sprawdz czy tam wchodzi. Zdebuguj, cokolwiek - bedzie znacznie latwiej
|
|
|
|
Post
#8
|
|
|
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 |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 10:48 |