Cześć.
Potrzebuję sprawdzać czy na danej stronie (na obcym serwerze) coś się zmieniło. A więc zapisuję sobie treść danej strony w pliku (jeśli ten plik nie istnieje) a następnie porównuję to co w pliku (zapisanew wcześniej) do tego jak strona wygląda obecnie. Jeśli są różnice wysyłam mejla. To realizuję tym kodem (fragment):
$url = 'https://strona.ktora.ogladam.pl/podstrona/'; // pliczek z zawartoscia strony $filename = 'page_content.txt'; // wyciaganie zawartosci strony function fetchPageContent($url) { $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $content = curl_exec($ch); curl_close($ch); return $content; } // porownanie poprzedniej wersji strony z obecna function compareContent($currentContent, $filename) { // jesli pliku nie ma - stworz go if (!http://www.php.net/file_exists($filename)) { file_put_contents($filename, $currentContent); return "Nie było treści. Utworzono."; } else { // porownaj $previousContent = http://www.php.net/file_get_contents($filename); if ($currentContent === $previousContent) { return "Brak zmian."; } else { // zaktualizuj zawartosc pliku ze strona file_put_contents($filename, $currentContent); // wysylanie mejla jesli wykryto zmiany $from = "ja@ja.pl"; $to = "ty@ty.pl"; $subject = "Wykryto zmiany!"; $message = "Na stronie wykryto zmiany w stounku do poprzedniego stanu."; $headers = "From: $from"; http://www.php.net/mail($to, $subject, $message, $headers); return "WYKRYTO ZMIANY!"; } } } $currentContent = fetchPageContent($url); $result = compareContent($currentContent, $filename); http://www.php.net/echo $result;
Oraz ustawiłem drugie zadanie CRONa, co 2 minuty wywołanie skryptu test.php:
$from = "test@test.pl"; $to = "sadistic@son.pl"; $subject = "TEST"; $message = "to jest tylko test mejla co minutę"; $headers = "From: $from"; http://www.php.net/mail($to, $subject, $message, $headers);
zacznij od tego by bledow nie wywalac w kosmos tylko do pliku, to moze cos ciekawego sie dowiesz
no i czemu twoj zapis cron wyglada tak
*/30 * * * *
/usr/local/bin/php80 /home/mojUser/domains/moja.domena.pl/public_html/ch_change/index.php >/dev/null 2>&1
a nie tak
*/30 * * * * /usr/local/bin/php80 /home/mojUser/domains/moja.domena.pl/public_html/ch_change/index.php >/dev/null 2>&1
?
Nie mam dostępu do konsoli, tylko w formularzu to wpisuję - oddzielny input dla minut, godzin, itd. No dobra, czyli zakładam, że żeby zobaczyć błędy z CRONa to muszę wywalić końcówkę, tj to: ">/dev/null 2>&1" tak?
EDIT:
eeee, jako oudput z CRONa (po usunięciu końcówki ze ścieżki) dostałem zawartość htmla... :| Nie wiem co o tym myśleć. Ów skrypt ma też zwiększać counter w pliku, czego teraz po teoretycznym wystartowaniu CRONa nie zrobił.
no widzisz, czyli cron sie wykonuje, tylko skrypt daje ciala
prawdopodbnie o to
$content = curl_exec($ch);
zamiast do zmiennej to pluje ci do ekran
Moze to pomoze
https://stackoverflow.com/questions/12269929/curlopt-returntransfer-set-to-true-doesnt-work-on-hosting-server
Niestety, kiedy zmieniam true na false, tak jak w temacie na stackoverflow to w ogóle dzieją się cuda wianki - wyświetla monitorowaną stronę a na jej górze dodaje mój licznik. Porównanie zawsze zwraca false, bo plik z zapisaną wcześniejszą wersją strony nagle zawiera jedynie '1'.
A da się inaczej to zrobić niż curlem?
tam nei tylko bylo o true vs false. Spradz czy nie masz redirectow jakis, tam bylo tez mowa o innych wlasciwosciach do sprawdzenia, sprawdz tez co dokladnie zwraca ten htm, co to za tresc jest.
Ale to można zrobić zwykłym file_get_contents podając url strony i nie trzeba się z curlem użerać... To zadziała tak samo?
sprobuj
No działa - w pliku jest zawartość strony. Wygląda tak samo jak zropbione curl'em.
To teraz czemu to nadal nie wykonuje się poprawnie przez CRON? Czy wywołując skrypt CRONem skrypt nie może zawierać żadnego echo ? Odpalony manualnie działa bez zarzutu.
ale patrzyles jak prosilem co zwraca HTML po odpaleniu przez CRON?
Rozumiem, że jedyną metodą którą mogę to sprawdzić to ustawienie ścieżki bez ' >/dev/null 2>&1' , tak? Na moim hostingu działa to tak, że output z tego cron tasku dostanę na mejla. Czekam na tego mejla obecnie.
mogles tez zapisac to do pliku, jak mowilem wczesniej
>/tmp/log.txt
Muszę sprawdzić czy mam tam dostęp z poziomu managera plików. Jutro sprawdzę. Thx.
A co oznacza ten zapis? 2>&1?
https://stackoverflow.com/questions/818255/what-does-21-mean
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)