Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Skrypt do zbierania maili nie działa prawidłowo.
Forum PHP.pl > Forum > Przedszkole
kamjot
Witam. Uczę się PHP od jakichś dwóch tygodni i utknąłem w miejscu.Moje środowisko do XAMPP i PHP 5.6.31

Korzystam z kursu na kursphp.com, jestem teraz na końcu jednego z rozdziałów ( https://kursphp.com/rozdzial-5/podsumowanie...tego-rozdzialu/ ) i utknąłem.

Skrypt ma "czytać" daną stronę lub blik i zbierać adres email dopasowany według wyrażenia regularnego, po czym zapisać zebrane maile do pliku a następnie wysłać je mailem.

Oryginalny skrypt wygląda tak:

  1. <?php
  2.  
  3. function zdobadz_email($strona) //tutaj podajemy adres strony lub ścieżke pliku, wywołanie funkcji i podanie argumentu odbywa sie za pomocą require_once () z osobnego pliku
  4. {
  5. // formuła prawidłowego adresu e-mail
  6. $sprawdz = '/^[a-zA-Z0-9.\-_]+@[a-zA-Z0-9\-.]+\.[a-zA-Z]
  7. {2,4}$/';
  8.  
  9. $plik = fopen($strona,'r'); // otwarcie pliku strony
  10. // utworzenie naszego pliku
  11. $moj_plik = fopen('tymczasowy_index.txt','a');
  12. flock($moj_plik, 2); // blokada pliku
  13.  
  14. // przeszukujemy plik dopóki nie znajdziemy sie na końcu
  15. while(!feof($plik))
  16. {
  17. $linia = fgets($plik); // pobieramy jedną linię
  18.  
  19. // sprawdzamy, czy znajduje się tam adres e-mail
  20. // jeśli tak, zapisujemy do naszego pliku
  21. if (ereg($sprawdz, $linia, $wynik))
  22. fputs($moj_plik, $wynik);
  23. }
  24. fclose($plik); // zamykamy plik strony
  25.  
  26. // po zapisaniu danych, wskaźnik znajduje się na końcu pliku
  27. // musimy go przewinąć znów na początek funkcją rewind()
  28. rewind($moj_plik);
  29.  
  30. // zawartość zapisanego pliku wczytujemy do tablicy adresów
  31. // $adresy, z wykorzystaniem funkcji file
  32. $adresy = file($moj_plik);
  33.  
  34. // procedura wysyłania maila
  35. $adres = "przyklad@uzycia.pl";
  36. $tytul = "Adresy e-mail";
  37. $wiadomosc = "Znalezione adresy e-mail to: $adresy";
  38. mail($adres, $tytul, $wiadomosc);
  39.  
  40. // odblokowanie pliku
  41. flock($moj_plik, 3);
  42.  
  43. // zamknięcie
  44. fclose($moj_plik);
  45.  
  46. // usunięcie, po wysłaniu e-mailem
  47. unlink($moj_plik);
  48. }
  49.  
  50. ?>


Skrypt jest dziwny chociażby przez użycie ereg w 21 linijce (przez co przy wywołaniu funkcji wyrzuca Warning: ereg(): REG_ERANGE) natomiast składnia wyrażenia z 6 linijki wygląda na preg_match i taką też zmianę zastosowałem.

Następne warningi jakie dostaje to:

Warning: file() expects parameter 1 to be a valid path, resource given in C:\xampp\htdocs\kursphp\roz-4-6\5\funkcja_szukaj_maila.php on line 72 //(w poście linijka 32)
Warning: unlink() expects parameter 1 to be a valid path, resource given in C:\xampp\htdocs\kursphp\roz-4-6\5\funkcja_szukaj_maila.php on line 87 //(w poście linijka 47)

Domyśliłem się, że lokalizacja pobrana ze zmiennej $moj_plik jest nieprawidłowa ze względu na obecność w niej funkcji fopen więc podałem samą ścieżkę i co prawda warningi zniknęły, ale teraz funkcja zwraca taki notice:
Notice: Array to string conversion in C:\xampp\htdocs\kursphp\roz-4-6\5\funkcja_szukaj_maila.php on line 77 (w poście linijka 37).

Co prawda skrypt wykonuje się do końca (kasuje plik za pomocą unlink() na samym końcu, ale po moich modyfikacjach) i wysyła maila ale w treści nie ma maili, które powinny być pobranie z podanego pliku.

Czy będzie ktoś miły i pomoże mi rozwikłać dlaczego ten skrypt nie działa poprawnie albo chociaż naprowadzić? Korzystałem z manuala php i czytałem na temat użytych w skrypcie funkcji i ich parametrów i w sumie nie mam się do czego doczepić, wszystkie podane parametry wyglądają w porządku.

Dziękuję serdecznie, pozdrawiam.
nospor
Polecam zmienic kurs bo pisal go jakis poczatkujacy... takie bledy... koles nawet nie testowal tego co publikuje :/

Tobie zas polecam manual i zagladniecie do funkcji, ktore rzucaja bledem.
kamjot
Cytat(nospor @ 5.09.2017, 15:46:23 ) *
Polecam zmienic kurs bo pisal go jakis poczatkujacy... takie bledy... koles nawet nie testowal tego co publikuje :/

Tobie zas polecam manual i zagladniecie do funkcji, ktore rzucaja bledem.



Z tym kursem to się zgadzam, już nieraz musiałem poprawiać kod aby zaczął działać wink.gif Myślałem, że tutaj też dam radę, ale poległem, straciłem pół dnia na próby i dalej jestem w tym samym miejscu.

Co do błędów ereg, to zmieniłem na preg_match i jak dla mnie jest dobrze. Jednak już zaczyna mi się rozjaśniać - ja dobrze rozumiem 3 parametr preg_match() zapisuje znaleziony wzór w formie tablicy do pliku $moj_plik, więc jak dobrze rozumiem w pliku "tymczasowy_index.txt" poiwnienem się spodziewać czegoś w rodzaju $wynik[0] = "mail@mail.com" itp. natomiast plik ten jest pusty (wyłączyłem unlink, żeby sprawdzić zawartość pliku).

Co do ostatniego błędu Array to string conversion to domyślam się, że powinienem przekonwertować tablicę do stringa np za pomocą explode albo wywołać każdy indeks tablicy ręcznie?
nospor
Cytat
Warning: file() expects parameter 1 to be a valid path, resource given in
Mowie poraz kolejny: zajrzyj do manuala co oczekuje funkcja file() jako pierwszy parametr a co ty dajesz.
kamjot
Cytat(nospor @ 5.09.2017, 16:14:35 ) *
Mowie poraz kolejny: zajrzyj do manuala co oczekuje funkcja file() jako pierwszy parametr a co ty dajesz.


Ok, gdy używam parametrów z oryginalnego kodu czyli
  1. $adresy = file($moj_plik);
to dostaję warning file() expects parameter 1 to be a valid path

ale

gdy użyję według mnie (na podstawie manuala wynika, że wystarczy tylko ścieżka do pliku, flagi mi tutaj raczej nie będą potrzebne) poprawnie skonfigurowanej funkcji file czyli:
  1. $adresy = file('tymczasowy_index.txt');
(plik 'tymczasowy_index.txt' znajduje się w tym samym katalogu co plik .php)

to warny znikają.

Ale problem jest jeszcze przed funkcją file() gdyż pętla while() powinna zapełnić plik 'tymczasowy_index.txt' a mimo to plik nie uzupełnia się danymi a wykonywanie funkcji kończy się komunikatem: Notice: Array to string conversion in C:\xampp\htdocs\kursphp\roz-4-6\5\funkcja_szukaj_maila.php on line 77

viking
Zacznij poprawiać błędy od początku a nie końca. Masz gdzieś tablicę wcześniej.
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.