Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak wyświetlić pojedyncze ciekawostki z funkcji calendar?
Forum PHP.pl > Forum > PHP
Saki
  1. /*
  2. Witam, dzisiejszy problem polega na tym, że chce wysłać pojedynczo wiadomości z systemu linuks po wpisaniu "calendar" dla dnia, czyli "calendar | grep 15" dla dzisiejszej daty.
  3. Po wpisaniu w terminalu "calendar | grep 15" wyświetla:
  4.  
  5. sty 15 Martin Luther King, Jr. born
  6. sty 15 Arbor Day in Jordan
  7. sty 15 N'oubliez pas les Rémi !
  8. sty 15 S'il gčle ŕ la saint Maur,
  9. sty 15 Ermordung von Rosa Luxemburg und Karl Liebknecht, 1919
  10. sty 15 Lóránt, Loránd
  11. sty 15 Сретение Господне
  12. sty 15 День Триглава
  13. sty 15 Стрітення Господнє
  14.  
  15. Sama funkcja "calendar" pokazuje informacje na 4 dni.
  16.  
  17. Teraz chce zrobić w PHP aby każda wiadomośc pojedynczo w odstępie 10 sekund była wysyłana na blip.pl.
  18. Zacząłem już pisać kod i mam coś takiego:
  19. */
  20.  
  21. $data = date("j"); #Pokazuje datę dnia, aby wyswietlić ciekawostki na obecny dzień.
  22. $z = exec('calendar | grep '.$data.''); #Za pomocą grep i zmiennej $data wyswietlam tylko ciekawostki na obecy dzień.
  23.  
  24. /*
  25. Tak i od tego momentu zaczyna się mój problem jak wyswietlicz pojedyncze ciekawostki i w odstępie 10 sekund ( sleep(10); ) wyswietlić kolejną ciekawostkę?
  26. Próbowałem już coś takiego, ale wyswietla tylko ostatnią ciekawostkę na obecny dzień.
  27. */
  28.  
  29. while ($z) {
  30. sleep(10);
  31. // echo $z++;
  32. while($z)
  33. {
  34. if($z)
  35. break;
  36.  
  37. next($z);
  38. }
  39.  
  40.  
  41. $dowyslania = ''.$z.'';
  42. echo $dowyslania;
  43.  
  44. /*
  45. #To wysyła
  46. $dowyslania = ''.$z.'';
  47. $blip->send($dowyslania);
  48. */
  49. }
  50.  
  51. #Później chce dać skrypt do crona i niech się odpala co 24h :)
  52.  


Dokładne wytłumaczenie:
Po wpisaniu w terminalu "calendar" wyświetlają się ciekawostki ze świata, ja chce je odczytać przez PHP i w czasie 10 sekund kolejno wysyłać na serwis blip.
Nie mam dostępu do pojedynczych ciekawostek po wpisaniu calendar | grep 15 wyświetlają się same wszystkie ciekawostki na dzień 15 czyli dzisiejszy.
Crozin
1. exec
Cytat
Return Values:

The last line from the result of the command. [...]

2.
  1. exec('...', $data); // Patrz: drugi argument funkcji exec()
  2.  
  3. foreach ($data as $line) {
  4. // $line to pojedyncza linia, czyli przykładowo: "sty 15 N'oubliez pas les Rémi !"
  5.  
  6. sleep(10);
  7. }
thek
Zważywszy, że skrypt ma limit czasu zazwyczaj to obawiałbym się o to, czy zdołasz wyświetlić wszystkie w ciągu jego trwania. Ogólnie stworzyłbym sobie tablicę wyników z grepa i w pętli leciał po kolejnych indeksach bo to najprostsze rozwiązanie.
Saki
Cytat(thek @ 15.01.2011, 00:23:37 ) *
Zważywszy, że skrypt ma limit czasu zazwyczaj to obawiałbym się o to, czy zdołasz wyświetlić wszystkie w ciągu jego trwania. Ogólnie stworzyłbym sobie tablicę wyników z grepa i w pętli leciał po kolejnych indeksach bo to najprostsze rozwiązanie.


To nie limit czasu tylko czas do wyswietlenia kolejnej ciekawostki,

Czyli najpier pierwsza ciekawostka za 10 sekund następna itd...

##################################################

Cytat(Crozin @ 15.01.2011, 00:22:01 ) *
2.
  1. exec('...', $data); // Patrz: drugi argument funkcji exec()
  2. foreach ($data as $line) {
  3. // $line to pojedyncza linia, czyli przykładowo: "sty 15 N'oubliez pas les Rémi !"
  4. sleep(10);
  5. }



  1. $z = exec('calendar | grep '.$data.'', $data);
  2.  
  3. foreach ($data as $z) {
  4.  
  5.  
  6. sleep(1);
  7.  
  8.  
  9.  
  10. $dowyslania = ''.$z.'';
  11. echo $dowyslania;
  12. }


Działa!
Dziękuje za szybką pomoc smile.gif
thek
Nie pisałem o sleep jako limicie, tylko limicie czasu działania skryptu. Chcesz ciekawostki puszczać co 10 sekund, a domyślnie skrypt może się wykonywać 30, więc nie dojdzie nawet do 4 wpisu w tej tablicy i skrypt się wysypie z powodu przekroczenia dozwolonego czasu działania. Zmniejsz sleep, zwiększ czas wykonywania skryptu lub kombinuj inaczej. Jest kilka sposobów jeszcze na to, w tym mój ulubiony i najbardziej niebezpieczny zarazem - wywołanie ze sleepem i exit samego siebie. Ale to jest ryzyko, gdyż tworzysz potencjalnie działający w nieskończoność skrypt smile.gif Dlatego lepiej nie brać się za to bez odpowiedniej wiedzy.

PS: Widziałem Twój post nie poprawiony (godzinę temu), gdzie jeszcze się wkurzałeś, że nadal kod nie działa. Cieszę się, że zauważyłeś swojego babola.
Saki
Cytat(thek @ 15.01.2011, 02:12:38 ) *
Nie pisałem o sleep jako limicie, tylko limicie czasu działania skryptu. Chcesz ciekawostki puszczać co 10 sekund, a domyślnie skrypt może się wykonywać 30, więc nie dojdzie nawet do 4 wpisu w tej tablicy i skrypt się wysypie z powodu przekroczenia dozwolonego czasu działania. Zmniejsz sleep, zwiększ czas wykonywania skryptu lub kombinuj inaczej. Jest kilka sposobów jeszcze na to, w tym mój ulubiony i najbardziej niebezpieczny zarazem - wywołanie ze sleepem i exit samego siebie. Ale to jest ryzyko, gdyż tworzysz potencjalnie działający w nieskończoność skrypt smile.gif Dlatego lepiej nie brać się za to bez odpowiedniej wiedzy.

PS: Widziałem Twój post nie poprawiony (godzinę temu), gdzie jeszcze się wkurzałeś, że nadal kod nie działa. Cieszę się, że zauważyłeś swojego babola.


Ale ja w configu php zmieniłem czas wykonywania skyptu na 1min.
Zmieniłem sleep na 2 sekundy smile.gif
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.