Witam Posiadam hosting na home.pl - mam kłopot z wysyłką maili do zarejestrowanych użytkowników na poprzez stronę www.kwatery.org.pl. Maile wysyłane do użytkowników nie dochodzą do adresatów. Natomiast przy rejestracji nowy użytkownik dostaje maila z automatu ze się zarejestrował oraz później ze dodał obiekt. Kupiłem skrypt obsługujący stronę www.kwatery.org.pl. Jest tam plik CRON jest ustawiony w katalogu głównym strony. Strona jest w osobnym katalogu. Sprzedawca twierdzi że skrypt jest ok (cyt:Za e-mail odpowiada wywołanie harmonogramu CRON, najwyraźniej nie jest on wywoływany i wysyłka nie działa). Proszę o sprawdzenie na serwerze czy harmonogram Cron jest wywoływany i co jest przyczyną usterki? Odp z home to cyt: Uprzejmie wyjaśniam, że logi potwierdzają, że serwer prawidłowo realizuje CRONA. Należy sprawdzić czy skrypt nie zawiera błędnych danych. Jednym z błędów jest ścieżka, która nie istnieje: > > $path = "/home/nazwa_uzytkownika/public_html/domena.pl/"; Zainstalowałem plik errors według wcześniejszego zalecenia czatu i wyszły błędy w pliku cron-10 min w linii 20: [17-Jan-2016 18:20:01 Europe/Warsaw] PHP Parse error: syntax error, unexpected '*' in /cron-10min.php on line 20 Linia 20 to: */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php Nie jestem fachowcem w temacie i powoli wymiękam – proszę o pomoc. Pozdrawiam Krzysztof Zapis pliku cron-10min to: > > <?php > > /*********************************************************************** > > * Avatec Framework - Wersja 3.0.2013 * > > * Copyright (c) 2010-2013 Avatec.pl. Wszystkie prawa zastrzeżone * > > * ------------------------------------------------------------------- * > > * @author: Grzegorz Miśkiewicz * > > * @version: 1.0 * > > > > ******************************************************************** > > ** > > */ > > > > /** > > W przypadku, gdy wywołanie tego pliku następuje za pomocą: > > - lynx > > - wget > > - curl > > > > Ten parametr należy zostawić bez zmian. Gdy jednak skrypt ten jest > > wywoływany > > przez interpreter PHP (np. na NAZWA.PL) zmienna ta powinna mieć > > wartość dokładnej > > ścieżki np. > > > > */10 * * * * wget -O --spider > > http://www.kwatery.org.pl/cron/cron-10min.php > > > > > > $path = "/home/nazwa_uzytkownika/public_html/domena.pl/"; > > **/ > > > > $path = $_SERVER['DOCUMENT_ROOT'] . "/"; > > > > /** > > Domyślny limit wysyłanych jednorazowo maili przy jednym > > uruchomieniu skryptu **/ > > > > $limit = 50; > > > > file_put_contents($path . "logs/cron-10min.txt", "RUN AT > > [".date('Y-m-d H:i:s')."]\r\n" , FILE_APPEND); > > file_put_contents($path . "logs/cron-10min.txt", "Path Detected: > > ".$path."\r\n" , FILE_APPEND); > > > > include $path . "header.php"; > > > > $maile = $sql->sqlExec("*" , SQLTABLE_MESSAGES , "WHERE > > msg_status='WAITING' LIMIT 0," . $limit); > > > > if(is_array($maile)) { > > foreach($maile as $item): > > $error = $kernel->sendMessage($item['msg_name'], > > $item['msg_email'], $item['msg_title'], $item['msg_text']); > > if( $error == true ): > > $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='SENDED', > > msg_sended=NOW()" , "msg_id='".$item['msg_id']."'"); > > file_put_contents($path . "logs/cron-10min.txt", "[OK] Message > > ".$item['msg_id']." to address ".$item['msg_email']." has been > > sended successfully\r\n" , FILE_APPEND); > > else: > > file_put_contents($path . "logs/cron-10min.txt", "[ERROR] > > Message ".$item['msg_id']." to address ".$item['msg_email']." has > > not been sended becouse error occured\r\n" , FILE_APPEND); > > $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='ERROR'" , > > "msg_id='".$item['msg_id']."'"); > > endif; > > > > endforeach; > > } else { > > file_put_contents($path . "logs/cron-10min.txt", "\r\nNo E-mails to send. > > Ending...\r\n" , FILE_APPEND); > > } > > > > fclose ($fp); > > file_put_contents($path . "logs/cron-10min.txt", "\r\n\r\n" , > > FILE_APPEND); ?>
Podsumowując, rozumiem że wiadomości wysyłane z poziomu skryptu umieszczonego na serwerze w home.pl nie są dostarczane do użytkowników? Najprawdopodobniej jest to spowodowane tym, że skrypt nie spełnia wymagań, które zostały jakiś czas temu wprowadzone w konfiguracji serwerów pocztowych. Bez spełnienia tych zasad, wiadomości wysyłane z serwera nie będę przepuszczane dalej. Więcej informacji na ten temat opisujemy tutaj: https://pomoc.home.pl/baza-wiedzy/formularz-kontaktowy-na-stronie-www-nie-wysyla-wiadomosci/
A i nie dopisałem, że wcześniej pisałem o tym na czacie z home.pl i podczas sprawdzania działania crona przez konsultanta wysyłka ruszyła i została jednorazowo wysłana. Tak samo było po zgłoszeniu mailowym. Minute przez udzieleniem odpowiedzi przez home.pl. wysyłka maili ruszyła jednorazowo.
ciekawi mnie tylko log: Kod: [17-Jan-2016 18:20:01 Europe/Warsaw] PHP Parse error: syntax error, unexpected '*' in /cron-10min.php on line 20 w home nie używamy zapisów typu: Kod: */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php od tego jest właśnie nazwa pliku np cron-5min.php i w tym pliku należałoby umieścić Kod: wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
Witam zamieniłem linijkę: */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php na wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php maile nie zostały wysłane i w pliku errors wyszły takie błędy: [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: file_put_contents(//logs/cron-10min.txt) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 34 [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: file_put_contents(//logs/cron-10min.txt) [<a href='function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 35 [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: include(//header.php) [<a href='function.include'>function.include</a>]: failed to open stream: No such file or directory in /cron-10min.php on line 37 [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Warning: include() [<a href='function.include'>function.include</a>]: Failed opening '//header.php' for inclusion (include_path='.:/:/usr/local/php/pear5') in /cron-10min.php on line 37 [27-Jan-2016 19:40:01 Europe/Warsaw] PHP Fatal error: Call to a member function sqlExec() on a non-object in /cron-10min.php on line 39 Twórca skryptu ponownie sprawdzał jego budowę i potwierdził jego poprawność. Nadto jak ręcznie wywołuję plik crona poprzez wklejenie w przeglądarkę zapis http://www.kwatery.org.pl/cron/cron-10min.php to maile zostają wysłane bez względu czy zapis w pliku cron jest taki */10 * * * * wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php lub taki wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php
wklej całą zawartość pliku cron pomiędzy tagami: [ code ] i [ /code ] bez spacji będzie łatwiej go czytać, jednak tak jak wspomniano Ci w pomocy: Kod: $path = "/home/nazwa_uzytkownika/public_html/domena.pl/"; jeśli masz podczepioną domenę pod dany katalog (na pewno przy separacji) to tu ma być Kod: $path = "/"; chociaż w sumie masz to zakomentowane, jednak tak czy siak powinno być / w ścieżce. Po drugie zrób plik /logs/cron-10min.txt z prawami do zapisu.
Dziękuje za odpowiedz: Poniżej wkleiłem plik crona pomiędzy [ code ] i [ /code ] i zmieniłem ponownie na wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php oraz $path = "/"; plik crona był ustawiony do odczytu i zapisu nie jest odhaczone wykonanie jak na razie maile nie wysyłają się automatycznie po wywołaniu ręcznym wysyłają się (poprzez wklejenie w przeglądarkę zapis http://www.kwatery.org.pl/cron/cron-10min.php) Kod: <?php /*********************************************************************** * Avatec Framework - Wersja 3.0.2013 * * Copyright (c) 2010-2013 Avatec.pl. Wszystkie prawa zastrzeżone * * ------------------------------------------------------------------- * * @author: Grzegorz Miśkiewicz * * @version: 1.0 * ***********************************************************************/ /** W przypadku, gdy wywołanie tego pliku następuje za pomocą: - lynx - wget - curl Ten parametr należy zostawić bez zmian. Gdy jednak skrypt ten jest wywoływany przez interpreter PHP (np. na NAZWA.PL) zmienna ta powinna mieć wartość dokładnej ścieżki np. */ wget -O --spider http://www.kwatery.org.pl/cron/cron-10min.php $path = "/home/nazwa_uzytkownika/public_html/domena.pl/"; **/ $path = "/"; /** Domyślny limit wysyłanych jednorazowo maili przy jednym uruchomieniu skryptu **/ $limit = 50; file_put_contents($path . "logs/cron-10min.txt", "RUN AT [".date('Y-m-d H:i:s')."]\r\n" , FILE_APPEND); file_put_contents($path . "logs/cron-10min.txt", "Path Detected: ".$path."\r\n" , FILE_APPEND); include $path . "header.php"; $maile = $sql->sqlExec("*" , SQLTABLE_MESSAGES , "WHERE msg_status='WAITING' LIMIT 0," . $limit); if(is_array($maile)) { foreach($maile as $item): $error = $kernel->sendMessage($item['msg_name'], $item['msg_email'], $item['msg_title'], $item['msg_text']); if( $error == true ): $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='SENDED', msg_sended=NOW()" , "msg_id='".$item['msg_id']."'"); file_put_contents($path . "logs/cron-10min.txt", "[OK] Message ".$item['msg_id']." to address ".$item['msg_email']." has been sended successfully\r\n" , FILE_APPEND); else: file_put_contents($path . "logs/cron-10min.txt", "[ERROR] Message ".$item['msg_id']." to address ".$item['msg_email']." has not been sended becouse error occured\r\n" , FILE_APPEND); $sql->sqlUpdate(SQLTABLE_MESSAGES , "msg_status='ERROR'" , "msg_id='".$item['msg_id']."'"); endif; endforeach; } else { file_put_contents($path . "logs/cron-10min.txt", "\r\nNo E-mails to send. Ending...\r\n" , FILE_APPEND); } fclose ($fp); file_put_contents($path . "logs/cron-10min.txt", "\r\n\r\n" , FILE_APPEND); ?>
Dopiero teraz to zauważyłem. @kkk6969 spróbuj z sugestią zaproponowaną przez użytkownika @TheL w poprzednim poście. Nie sprawdziłem jak to wygląda u Ciebie na serwerze, ale według przedstawianych przez Ciebie adresów (np. http://www.kwatery.org.pl/cron/cron-10min.php) oraz na podstawie odwołań w zacytowanym kodzie można przypuszczać, że plik cron-10min.php znajduje się w podkatalogu na serwerze. Cykliczne uruchamianie (cron) na serwerach w home.pl uruchamia tylko odpowiednio nazwane pliki PHP, np. plik o nazwie „cron-5min.php” będzie wykonywany co 5 minut, począwszy od momentu opublikowania pliku w katalogu głównym serwera w home.pl. @kkk6969 spróbuj skorzystać z sugestii użytkownika podanej w poprzednim poście, musisz tylko utworzyć nowy plik o nazwie "cron-5min.php" i umieść go z odpowiednią zawartością w katalogu głównym serwera. Kod zaproponowany przez użytkownika @TheL spowoduje, że CRON będzie wywoływał co 5 minut skrypt znajdujący się w podkatalogu /cron/cron-10min.php Jeśli to nie zadziała to spróbuj umieścić zawartość pliku cron-10min.php w katalogu głównym serwera. CRON działa tylko w ramach skryptów umieszczonych w katalogu głównym.
Dodatkowe instrukcje odnośnie funkcjonowania CRONA w home.pl: Jeżeli dany skrypt PHP wykonuje się poprawnie, gdy wywoływany jest z poziomu przeglądarki, a nie dzieje się tak kiedy skrypt wywoływany jest w pliku cron, to sugerujemy przeniesienie treści skryptu do dowolnego innego pliku PHP i uruchamiania tego skryptu z pliku crona poleceniem wzorowanym na poniższym: Kod: <?php system('wget --delete-after http://konto.home.pl/plik.php'); ?> W przypadku, gdy wywoływany skrypt wymaga autoryzacji http: Kod: <?php system('wget --delete-after --user=UŻYTKOWNIK --password=HASŁO http://konto.home.pl/plik.php'); ?> W przypadku, gdy skrypt wywoływany jest z użyciem protokołu https: Kod: <?php system('wget --delete-after --no-check-certificate https://konto.home.pl/plik.php'); ?> Analogicznie z wykorzystaniem polecenia curl: Kod: <?php system('curl -f -s http://konto.home.pl/plik.php'); ?> W przypadku, gdy wywoływany skrypt wymaga autoryzacji http: Kod: <?php system('curl -f -s -u UŻYTKOWNIK:HASŁO http://konto.home.pl/plik.php'); ?> W przypadku, gdy skrypt wywoływany jest z użyciem protokołu https: Kod: <?php system('curl -f -s -k https://konto.home.pl/plik.php'); ?>
Dziekuję za pomoc Plik cron-10min znajduje się w katalogu głównym tj public_html a strona www.kwatery.org.pl znajduje się w katalogu. Utworzyłem nowy plik cron-5min (umieściłem go w katalogu głównym tj public_html i w środku wpisałem php /cron/cron-10min.php i niestety nic się nie dzieje. Teraz oba pliki cron-10min i cron-5min są w tym samym katalogu. Odnośnie Dodatkowe instrukcje odnośnie funkcjonowania CRONA w home.pl - to dla mnie czarna magia i na razie tego nie rozkminiłem o co chodzi - jak sprawdzić jak to u mnie działa? Pozdrawiam Krzysztof
plik cron-10min.php w takiej postaci może nie koniecznie się wykonać poprawnie, ja bym go przeniósł do katalogu cron a w głównym dał plik cron-10min.php o treści dokładnie takiej jak podawałem aby wykonał go interpreter php, sprawdzę to potem ale powinno to działać.
@kkk6969 - plik cron-10min.php ze skryptem napisanym przez informatyka umieść w katalogu /cron/ tak jak wcześniej, aby można było go wywołać pod adresem: http://www.kwatery.org.pl/cron/cron-10min.php Następnie w katalogu głównym serwera, czyli /public_html/ umieść plik cron-5min.php z poniższą zawartością: PHP: <?php system('wget --delete-after http://www.kwatery.org.pl/cron/cron-10min.php'); ?> lub taką zawartością: PHP: <?php system('curl -f -s http://www.kwatery.org.pl/cron/cron-10min.php'); ?> Przyznaję szczerze, że piszę wszystko na podstawie materiałów z tematu, nie sprawdziłem tego na Twoim serwerze, daj znać czy się udało. Niebawem wszystkie dodatkowe informacje na temat crona dodamy również do naszej dokumentacji: pomoc.home.pl