Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Skrypt do zbierania maili nie działa prawidłowo., Skrypt z kursu php, ale chyba źle napisany
kamjot
post 5.09.2017, 14:41:47
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.11.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował kamjot 5.09.2017, 14:43:14
Go to the top of the page
+Quote Post
nospor
post 5.09.2017, 14:46:23
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamjot
post 5.09.2017, 15:09:38
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.11.2010

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post 5.09.2017, 15:14:35
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kamjot
post 5.09.2017, 18:46:07
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 29.11.2010

Ostrzeżenie: (0%)
-----


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

Go to the top of the page
+Quote Post
viking
post 5.09.2017, 19:27:05
Post #6





Grupa: Zarejestrowani
Postów: 6 378
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Zacznij poprawiać błędy od początku a nie końca. Masz gdzieś tablicę wcześniej.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 7.07.2025 - 04:58