Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyciąganie emaili z pliku tekstowego
Forum PHP.pl > Forum > Przedszkole
amii
Mam plik tekstowy z tabelkami i tekstem gdzie są wmieszane adresy email, chce wyciągnąć z tego pliku adresy email. Napisałem takie coś ale nie działa.

  1. <?php
  2. $handle = file_get_contents('email.txt');
  3. $wzor = "/^\w{2,}[\w+\.]*+@\w+[\w+\.]*\.\w{2,}$/"; //tu jest cos zrabane najprawdopodobniej
  4. $szukaj = preg_match_all($wzor, $handle, $matches);
  5.  
  6. foreach ($matches as $value) {
  7. echo $value . '<br>';
  8. }
  9. ?>
wNogachSpisz
wzory pod email masz tu: http://www.regular-expressions.info/email.html

pierwszy link w google pod fraza 'regexp email address'

amii
OK podbijam tamten poprzedni problem już rozwiązałem. Teraz Chcę napisać funkcję odpowiedzialną za wydobywanie adresów email z plików tekstowych umieszczonych w domyślnym katalogu 'katalog' i i ich umieszczanie w osobnym pliku tekstowym lub bazie danych. Mam problem ze zliczeniem ilości wydobytych maili z pliku, zmienna $ile_maili wyświetla zły wynik, kod funkcji wygląda tak:

  1. function wydobadz() {
  2. $plik1 = 'adresy.txt'; //plik tekstowy do zapisywania wydobytych adresów email
  3. $wzor = "/([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}/"; //wzor maila jako wyrazenie regularne
  4. $matches = array();
  5. $handle = scandir('katalog');
  6.  
  7. for ($g=2; $g<count($handle); $g++) { //obieg petli rowny ilosci plikow w katalogu
  8. $plik = file_get_contents('katalog/'. $handle[$g]); //kazdy plik w katalogu wczytywany jako ciag znakow string
  9. $szukaj = preg_match_all($wzor, $plik, $matches, PREG_PATTERN_ORDER); //nastepnie szukamy wyrazen pasujacych do wzoru czyli adresow email
  10. $matches = array_unique($matches); //filtrujemy duplikaty
  11. $ile_maili = count($matches[$i]); //zliczamy ilosc wydobytych emaili
  12.  
  13.  
  14. for ($i=0, $j=0; $i<$ile_maili; $i++, $j++) { //zapisujemy wydobyte emaile do bazy lub do pliku txt domyslnie ustawione do pliku
  15. if ($matches[0][$i] != '') {
  16. //$sql4 = "INSERT INTO tabelka (id, emaile) VALUES (NULL, '$matches[$i]')";
  17. //mysql_query($sql, $conn) or die('Nie mam dostępu do bazy'. mysql_error());
  18.  
  19. $otworz1 = fopen($plik1, 'w+');
  20. if (!$otworz1) {
  21. echo 'Nie mogę otworzyć pliku' . $plik1;
  22. }
  23. else {
  24. for ($z=0; $z<$ile_maili; $z++) {
  25. $zapisuje = fwrite($otworz1, $matches[0][$z]. '');
  26. }
  27.  
  28. }
  29. fclose($otworz1);
  30. echo 'Zapisałem ' .$ile_maili . ' mail do pliku ' . $plik1 . ' status: OK';
  31. }
  32. else {}
  33. }
  34. }
bobo168
  1. $ile_maili = count($matches[$i]); //zliczamy ilosc wydobytych emaili


a zmienna "$i" skąd przecież deklarujesz ją dopiero 3 linijki niżej przy pętli...

Pawel_W
zamiast $i daj 1 winksmiley.jpg
amii
Rozbiłem to na dwie funkcje i nic, mimo że dane wyświetlają się poprawne -> http://www.ekasa.hekko.pl/mailing/myown.php
To funkcja fwrite nadpisuje wartość zmiennych z pierwszego pliku aaevil.gif W manualu jest wyjaśnione, że fwrite dopisuje dane na końcu a nie nadpisuje więc o co kaman questionmark.gif?

  1. /************************************funkcja wydobywajaca emaile z plikow***************************************************/
  2. function wydobadz() {
  3. $plik1 = 'adresy.txt'; //plik tekstowy do zapisywania wydobytych adresów email
  4. $wzor = "/([0-9a-zA-Z]+[-._+&])*[0-9a-zA-Z]+@([-0-9a-zA-Z]+[.])+[a-zA-Z]{2,6}/"; //wzor maila jako wyrazenie regularne
  5. $matches = array();
  6. $handle = scandir('katalog');
  7.  
  8.  
  9. for ($g=2; $g<count($handle); $g++) { //obieg petli rowny ilosci plikow w katalogu
  10. $plik = file_get_contents('katalog/'. $handle[$g]); //kazdy plik w katalogu wczytywany jako ciag znakow string
  11. $szukaj = preg_match_all($wzor, $plik, $matches, PREG_PATTERN_ORDER); //nastepnie szukamy wyrazen pasujacych do wzoru czyli adresow email
  12. $matches = array_unique($matches); //filtrujemy duplikaty
  13. $ile_maili = count($matches[1]); //zliczamy ilosc wydobytych emaili
  14. echo '<br><br> Matches 1 wynosi '. count($matches[1]) . '<br><br>';
  15. echo '<br><br> Plik to '. $handle[$g] . '<br><br>';
  16.  
  17.  
  18.  
  19. plik($plik1, $ile_maili, $matches);
  20.  
  21. //for ($i=0, $j=0; $i<$ile_maili; $i++, $j++) { //zapisujemy wydobyte emaile do bazy lub do pliku txt domyslnie ustawione do pliku
  22. //if ($matches[0][$i] != '') {
  23. //$sql4 = "INSERT INTO tabelka (id, emaile) VALUES (NULL, '$matches[$i]')";
  24. //mysql_query($sql, $conn) or die('Nie mam dostępu do bazy'. mysql_error());
  25.  
  26.  
  27. //fclose($otworz1);
  28.  
  29. //}
  30. //else {}
  31. //}
  32. }
  33.  
  34. }
  35. //echo '<br><br>Tablica ma <strong> ' . $j . ' </strong>adresów email<br><br><br>';
  36. /************************************funkcja wydobywajaca emaile z plikow***************************************************/
  37.  
  38. function plik($plik1, $ile_maili, $matches) {
  39.  
  40. $otworz1 = fopen($plik1, 'w+');
  41. if (!$otworz1) {
  42. echo 'Nie mogę otworzyć pliku' . $plik1;
  43. }
  44. else {
  45. for ($z=0; $z<$ile_maili; $z++) {
  46. $rozmiar = filesize($plik1);
  47. echo 'Rozmiar ' . $rozmiar . '<br>';
  48. $zapisuje = fwrite($otworz1, $matches[0][$z]."\r\n");
  49. echo '0 i $z wynosi ' . $matches[0][$z] . '<br>';
  50.  
  51.  
  52. }
  53. echo 'Zapisałem ' . $ile_maili . ' mail do pliku ' . $plik1 . ' status: OK';
  54. }
  55. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.