Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyszukanie wyrażenia regularnego i zapis do pliku
tchoman
post
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);
}

?>
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
jacobson
post
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.
Go to the top of the page
+Quote Post
tchoman
post
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
Go to the top of the page
+Quote Post
jacobson
post
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

  1. foreach($wynik[0] as $match){
  2. file_get_contents($moj_plik, $match);
  3. }


nie sprawdzalem wyrazenia regularnego czy na pewno dziala. Najwazniejsze to sprawdz czy na pewno znajduje Ci maila na stronie.
Go to the top of the page
+Quote Post
viking
post
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.
Go to the top of the page
+Quote Post
tchoman
post
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 &quot;localhost&quot; port 25, verify your &quot;SMTP&quot; and &quot;smtp_port&quot; 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
Go to the top of the page
+Quote Post
jacobson
post
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
Go to the top of the page
+Quote Post
tchoman
post
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.12.2025 - 10:48