Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]uruchamianie skryptu
Forum PHP.pl > Forum > Przedszkole
malminiart
Witam. O ile dobrze rozumiem skrypt php dziala po stronie serwera po uruchomieniu strony.
Jezeli ktos wchodzi na moja strone to uruchamia moj skrypt PHP.

Pytanie brzmi: Czy jest jakas mozliwosc uruchomienia skryptu w okreslonym momencie (data) jezeli nikt w tym dniu nie wejdzie na moja strone? Bo jezeli nikt nie wchodzi na strone to skrypt nie pracuje.

Np. Ustawiam na 15.09.2009 ze php wysle e-mail o tresci "jeszcze nikogo nie bylo na twojej stronie" jezeli nikogo nie bedzie.
Czy to jest wogole mozliwe do zrealizowania?
Crozin
Szukaj za "Cron"
franki01
http://pl.wikipedia.org/wiki/Crontab
W panelach administracyjnych takich jak Direct Admin, cPanel, Plesk masz możliwość ustawienia cronjobs.

EDIT:
Uprzedzony.
malminiart
OK! Niby wszystko jasne. Prosze o wyrozumialosc.

Rozumiem ze powinienem uzyc jakiegos programu typu klient-serwer. Program wymusza na serwerze zadzialanie w danym terminie.

Czyli nie ma bardziej bezingerencyjnej metody (robie ustawienia na serwerze na za tydzien i moge jechac na wakacje) ?

O ile zrozumialem wszystko prawidlowo.
Crozin
Cron to tak w dużym skrócie: program działający na serwerze (czyli ta sama maszyna na której jest skrypt) który to co dany interwał czasowy wykonuje daną komendę. W Twoim przypadku tą komendą będzie uruchomienie skryptu PHP co może wyglądać tak
Kod
php -f /sciezka/do/pliku/php.php
Wszystko wykonuje się w obrębie jednego serwera.
jinks
Od biedy pod windą jest też 'harmonogram zadań'.
MiChaSSs
poszukaj w google hasla "webcron" - (polska wersja http://www.webcron.pl/ niestety narazie jest wstrzymana)


Crozin -> chyba lepszym rozwiazaniem w skryptach odpalanych z konsoli jest wstawienie:
  1. #!/usr/bin/php -q <---- o to mi chodzi
  2. <?php
  3. // Tutaj skrypt
  4. ?>

A pozniej w cronie:
  1. * * * * * /sciezka/do/pliku.php
Crozin
@MiChaSSs: Oczywiście, że jest lepszym. Trzeba tylko pamiętać by plik miał jeszcze prawa do wykonywania:
Kod
chmod +x /path/to/file
Nie wiem czemu sam tego nie napisałem. winksmiley.jpg
malminiart
Cytat(Crozin @ 7.09.2009, 14:04:15 ) *
Cron to tak w dużym skrócie: program działający na serwerze (czyli ta sama maszyna na której jest skrypt) który to co dany interwał czasowy wykonuje daną komendę. W Twoim przypadku tą komendą będzie uruchomienie skryptu PHP co może wyglądać tak
Kod
php -f /sciezka/do/pliku/php.php
Wszystko wykonuje się w obrębie jednego serwera.


OK - Ale jak to sie ma do prostego wlasciciela domeny? Przeciez ja nie mam dostepu do serwera (bezposrednio). Czy mam racje?

EDIT: Ok zalapalem (tak mysle). Poprzez webcron moge wywolac dzialanie okreslonego skryptu php umieszczonego na mojej domenie. Czy mam racje?
Larges
Hmm. Jeśli jesteś właścicielem domeny i nie masz dostępu do serwera - nici.
Jeśli masz dostęp do serwera, jednak firma hostingowa nie zapewnia Tobie możliwości korzystania c Crona - nici.
Według mnie sam powinieneś we własnym zakresie się dowiedzieć czy masz dostęp do serwera, czy możesz używać Crona i jeśli możesz stworzyć w pliku skrypt, który bedzie wysyłał Tobie konkretnego maila lub bezpośrednio w Crontabie wpisać polecenie które wyśle Tobie maila każdego dnia i konkretnej porze (;
CyberDuck_
To zalezy od administratora serwera na, ktorym masz strone.
Jesli juz na prawde potrzebujesz czegos takiego popros admina
o dodanie wpisu do cron. Mozesz to zrobic nieco inaczej.
Np cron bedzie odpalac Ci skrypt co jakis ustalony czas, a
ten skrypt bedzie zarzadzac wieksza iloscia procesow.

Na niektorych serwerach admini udostepniaja dostep
poprzez shell i wtedy masz wieksze mozliwosci w ustawienia.
W Cpanel i nawet ktos tu juz o tym wspomnial jest cronjob.
Najlepiej jak kupisz sobie serwer dedykowany, wtedy jestes
panem u siebie i masz pelny dostep do serwera.

Cron to jest usluga systemowa w Linux i moze odpalac
rozne zdazenia najczesciej co minute lub o danej porze
dnia, o wyznaczonej godzinie. Jak przeczytasz w Wikipedii
o cron to sie wszystkiego dowiesz. U mnie cron zarzadza
zezwoleniami do hostow, wysyla mi codzienie ustalone
raporty na gg, odpala skrypt php blokowania zalegajacych
uzytkownikow sieci, itp ..

To co chcesz uzyskac, przy pomocy cron jest banalnie proste
do uzyskania.
Larges
Cytat(CyberDuck_ @ 8.09.2009, 00:24:41 ) *
Najlepiej jak kupisz sobie serwer dedykowany, wtedy jestes
panem u siebie i masz pelny dostep do serwera.


W zupełności się zgadzam. Sam jestem panem u siebie i cieszy mnie to. Jednak jeśli chcesz zaoszczędzić na hostingu możesz poszukać opcji serwerów wirtualnych z dostępem do crona. Przykładem jest az.pl - jednak niestety nie polecam (;
Codziennie wirtualny serwer siadał mi u nich na jakiś czas nawet gdy nie obsługiwał praktycznie żadnego ruchu. Jedynie przeprowadzałem własne, lekkie testy. Problem nie był rozwiązany przez cały okres świadczenia usługi, przykre (;
MiChaSSs
Cytat(malminiart @ 8.09.2009, 00:09:40 ) *
(...)
EDIT: Ok zalapalem (tak mysle). Poprzez webcron moge wywolac dzialanie okreslonego skryptu php umieszczonego na mojej domenie. Czy mam racje?

Tak, co prawda to jest metoda troche dookola winksmiley.jpg ale jesli nie ma sie dostepu do cron-a na swoim serwerze to tylko to zostaje, pozdrawiam MD
CyberDuck_
Jeszcze jedna wazna informacja dla Ciebie bo co prawda
ktos tutaj wspomnial o tym ale tylko tak przelotnie.
Jesli juz dostaniesz sie do cron to zaczna sie problemy
z wykonywaniem skryptu bo nie bedzie odpowiednich
uprawnien dla wykonywania skryptu.
Wiec to wszystko ustawiasz tak na prawde w dwoch
miejscach ... :
1. w cron po wpisaniu w shell 'crontab -e' [enter]
wprowadzasz np taki zapis :
  1. * */3 * * * php -f /home/httpd/html/strona/adm_autoblokada.php >/dev/null 2>&1

co oznacza , ze skrypt php o podanej sciezce powinien sie wykonac co
3 godziny bez raportowania w logach, ale sie nie wykona bo nie ma
ustawionych uprawnien dla wykonywania skryptu z poziomu
shell/root . Czyli nalezaloby jeszcze dopisac z poziomu shell :
  1. chmod +x /home/httpd/html/strona/adm_autoblokada.php

2. a nastepnie wejsc do sudo : visudo [enter]
i dopisac np cos takiego :
  1. nobody ALL=NOPASSWD:/home/httpd/html/strona/adm_autoblokada.php

Dopiero wtedy skrypt bedzie wykonywany tak jak sobie tego zyczysz.
Dlatego o ile dostaniesz dostep do cron to nie zawsze admini, i najczesciej
tak wlasnie jest , chca sie godzic na nadanie skryptowi specjalnych uprawnien, bo
to jest doskonala okazja na wyrzadzenie niezlych szkod na serwerze.

Jesli Twoja strona jest odpowiednio czesto odwiedzana to proponowalbym
Ci na poczatku skryptu poprostu sprawdzac czy juz minela odpowiednia
godzina i ewentualnie jesli tak zrobic to co chcesz.
MiChaSSs
nie do konca sie zgodze z kolega CyberDuck_ smile.gif Skoro kolega malminiart potrzebuje, aby skrypt wykonywal mu sie co jakis czas, wiec zapewne nie chce, aby ktos mu ten skrypt uruchamial (np. wchodzac przez WWW - no chyba ze umiesci po poza dostepem przez WWW) wiec chmod +x skrypt.php nie jest dobrym wyjsciem (bo ustawiasz, ze skrypt moze uruchomic kazdy), wg mnie lepiej jest zrobic chmod 700 skrypt.php (tutaj tylko uzytkownik, do ktorego nalezy skrypt moze go uruchomic, otworzyc, zapisac). Poza tym, kazdy skrypt powinien zaczynac sie tak, jak to podalem wczesniej, czyli:
  1. #!/usr/bin/php -q <---- o to mi chodzi
  2. <?php
  3. // Tutaj skrypt
  4. ?>

po to, zeby nie musiec niepotrzebnie wpisywac do crona php -f za kazdym razem (bedzie to wtedy bardziej czytelne). Co do samego crona, to przeciez admin serwera wcale nie musi dodawac skryptu kolegi do cron-a root-a (sic! smile.gif), wystarczy, ze zaloguje sie na konto szelowe malminiart i stworzy mu jego tablice cron-a, pozdrawiam MD smile.gif
CyberDuck_
Po co mam pisac dodatkowy skrypt zeby uruchomic inny
to ja nie wiem skoro mozna jednym wpisem zalatwic
sprawe z cron ?
Co do chmod zgodze sie, ale jesli chcesz sie tak juz
przepychac to chmod 0700 pozwoli jedynie wykonac :
  1. [x] odczytywanie przez właśc.
  2. [x] zapisywanie przez właśc.
  3. [x] wykonywanie przez właśc.
  4. [ ] odczytywanie przez grupę
  5. [ ] zapisywanie przez grupę
  6. [ ] wykonywanie przez grupę
  7. [ ] odczytywanie przez innych
  8. [ ] zapisywanie przez innych
  9. [ ] wykonywanie przez innych

Tak wiec jesli chcesz aby kazdy to wykonal bez specjalnego
logowania sie do shell np poprzez ftpd to musialoby
byc chmod 0755 :
  1. [x] odczytywanie przez właśc.
  2. [x] zapisywanie przez właśc.
  3. [x] wykonywanie przez właśc.
  4. [x] odczytywanie przez grupę
  5. [ ] zapisywanie przez grupę
  6. [x] wykonywanie przez grupę
  7. [x] odczytywanie przez innych
  8. [ ] zapisywanie przez innych
  9. [x] wykonywanie przez innych


ale ja sie tam nie znam ... worriedsmiley.gif
Poprostu nadanie praw poprzez +x ma najwyzszy priorytet
procz nadania wlasciciela do pliku i jest wygodniejsze bo w momencie
pisania skryptu zazwyczaj piszacy chce miec wglad do sprawdzania
czy to dziala, a najlatwiejsza i najszybsza metoda na to jest
wpisanie z linii komend php - f ... albo wywolanie teg skryptu
jak zwykla strone. Jesli ustawisz w 700 to nie bedziesz mogl tego
sprawdzic z poziomu httpd.

Zamiast php -f mozna dac php -q .
  1. [root@Serwer ~]# php -h
  2. Usage: php [options] [-f] <file> [args...]
  3. php [options] -r <code> [args...]
  4. php [options] [-- args...]
  5. -a Run interactively
  6. -c <path>|<file> Look for php.ini file in this directory
  7. -n No php.ini file will be used
  8. -d foo[=bar] Define INI entry foo with value 'bar'
  9. -e Generate extended information for debugger/profiler
  10. -f <file> Parse <file>.
  11. -h This help
  12. -i PHP information
  13. -l Syntax check only (lint)
  14. -m Show compiled in modules
  15. -r <code> Run PHP <code> without using script tags <?..?>
  16. -s Display colour syntax highlighted source.
  17. -v Version number
  18. -w Display source with stripped comments and whitespace.
  19. -z <file> Load Zend extension <file>.
  20.  
  21. args... Arguments passed to script. Use -- args when first argument
  22. starts with - or script is read from stdin

Ostatnio mialem przy pisaniu skryptu obslugujacego ekg2 problem z -f, a
w to miejsce pomoglo -q

Co do nadawania uprawnien z root moze i masz racje.
Ja zawsze zazwyczaj wykorzystywalem w skryptach :

i stad wymagania wiekszych uprawnien niz zwykle.
Moze przy wyslaniu z cron email nie potrzeba juz dodatkowych
wpisow do visudo. Trzeba sprawdzic. Napisalem to po to zeby
wiedzial z czym to sie moze wiazac jesli nadal skrypt nie bedzie
chcial sie wykonac.
MiChaSSs
Cytat(CyberDuck_ @ 8.09.2009, 14:30:27 ) *
Po co mam pisac dodatkowy skrypt zeby uruchomic inny
to ja nie wiem skoro mozna jednym wpisem zalatwic
sprawe z cron ?
(...)

A gdzie ja tak napisalem? smile.gif Piszac to na poczatku kazdego pliku php:
  1. #!/usr/bin/php -q <---- a to mi chodzi
  2. <?php
  3. // Tutaj skrypt skrypt napisany w jezyku PHP
  4. ?>

"mowisz" konsoli, ze jest to plik, ktory ma byc interpretowany jako plik PHP (dziala to tylko jesli PHP jest skompilowane jako CGI) i nie jest mu potrzebny Apache itd. - stad wlasnie opcja -q. Nie przepycham sie, tylko chce kolege nauczyc jak to dobrze zrobic, a nie zeby tylko dzialalo. Jesli kolega chce to wrzucic do cron-a to znaczy, ze nie chce zeby ktos mu ten plik sam odpalal stad chmod 700. I nieprawda jest ze nie mozna podgladnac pliku ktory ma chmod 700, bo przeciez zamiast przekierowywac wyjscie do /dev/null w cron-ie mozna to skierowac do pliku logujacego (owszem, nie bedzie mogl go wykonac kiedy mu sie to podoba bo cron sie tym zajmie), wiec taki wpis zalatwi sprawe:
  1. * * * * * /home/user/skrypt.php >> /home/user/logi.txt 2>&1


pozdr MD smile.gif
CyberDuck_
Mozna i tak. Moze ja nie doczytalem gdzie dopisujesz ten
wpis na poczatku, tylko, ze to nie dziala na kazdym serwerze.
Na niektorych poprostu wywali mu blad, ale ok.
Ma dwa sposoby do wyboru. Ja wole od razu wykonywac
plik php z interpretera, na koncu dopisujac logi lub tez nie
wedlug uznania. Zazwyczaj wylaczam logi bo pozniej mi przychodzi
masa maili z niepotrzebnymi wpisami od root blinksmiley.gif
Zazwyczaj i tak tam najczesciej nic nie ma ciekawego procz tego, ze
skrypt wykonal sie prawidlowo ... lub jakie to operacje zostaly wykonane.
Ja sie zabezpieczam haslem lub w inny sposob na poczatku skryptu.
Mozna taki skrypt wywolac z parametrem, ktorym jest np wlasnie
haslo dostepu do skryptu php i po problemie.
malminiart
no to zesmy pogadali panowie... teraz to ja juz ni ch***** nic nie nierozumiem. sciana.gif

Chyba zaloze serwer dedykowany i pobawie sie na swoim podworku Rkingsmiley.png
MiChaSSs
Nooo juz nie przesadzaj winksmiley.jpg wszystko masz ladnie opisane - jakby co pytaj. Najlepiej postaw sobie jakiegos linux-a na swojej maszynie i sie pobaw, pozdr MD winksmiley.jpg
CyberDuck_
Dokladnie.
Wiesz ... tak odchodzac od tematu ... ja pare lat temu nie wiedzialem
co to znaczy internet. Dzisiaj mam swoj serwerek kompletnie
niezalezny, ktory mi podgrzewa nogi zima biggrin.gif
Zartuje, ale mam siec oparta na routerze zbudowanym z PC
na tej : http://www.nnd-linux.pl/ dystrybucji.
Na tym sobie dodatkowo stoi serwerek www, ftp, poczty
i pare innych bajerkow smile.gif Jak sobie cos takiego postawisz u siebie
to nie dosc, ze sie uniezaleznisz to bedziesz miec zabawy do bolu.
Teraz jeszcze wyszla nowsza dystrybucja EOS wzorowana na NND.
Na forum sobie poczytasz i dowiesz sie wszystkiego . Fajna sprawa
i polecam kazdemu kto chce troszke wiecej.
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.