Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [cron] aktualizacja danych i generowanie obrazka
Forum PHP.pl > Forum > PHP
sznoorek
Tym Razem potrzebuje pomocy, aby zautomatyzować generowanie sygnatury.
Mam takie polecenie cron:
  1. 30 * * * * php -f /home/u699983519/public_html/skrypty/cron.php


Plik cron.php:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  6. <title>..:: Aktualizuj :: Lector :: WoT ::..</title>
  7. <link rel="shortcut icon" href='http://forum.worldoftanks.eu/favicon.ico' />
  8. </head>
  9. <body>
  10.  
  11. <center>
  12. <h1>..:: Aktualizuj :: Lector :: WoT ::..</h1><br /><br /><br />
  13.  
  14.  
  15. <?
  16. setlocale(LC_TIME, "polish");
  17. date_default_timezone_set('Europe/Warsaw');
  18. $data = strftime('%H:%M %d %B %Y');
  19. $wot_adres = @fopen ('http://worldoftanks.eu/community/accounts/500216878/api/1.8/?source_token=WG-WoT_Assistant-1.3.3.php', "r");
  20. if (!$wot_adres) {
  21.  
  22. $wiadomosc = '<div style="color: #d21c18;">Strona API WoT niedostępna.</div>';
  23. echo ($wiadomosc);
  24. mail('konstal81@gmail.com', 'Sygnatura', $wiadomosc);
  25. } else {
  26. include ('/home/u699983519/public_html/api/wot.php');
  27.  
  28. $file = @fopen ('/home/u699983519/public_html/dane/tabela.php', "r");
  29.  
  30. if (!$file) {
  31. $stara_ilosc = 0;
  32. } else {
  33. include ('/home/u699983519/public_html/dane/tabela.php');
  34. $stara_ilosc = $tabela[data][summary][battles_count];
  35. }
  36.  
  37. $nowa_ilosc = $tabela_wot[data][summary][battles_count];
  38.  
  39. if ($nowa_ilosc == $stara_ilosc) {
  40. $wiadomosc = '<div style="color: #6c91ac;">Dane są aktulne.</div>';
  41. echo ($wiadomosc);
  42. } else {
  43. $tabela_adres = ('/home/u699983519/public_html/dane/tabela.php');
  44. file_put_contents($tabela_adres, '<?
  45. $tabela = '.var_export($tabela_wot, true).'
  46. ?>');
  47. $wiadomosc = '<div style="color: #3e8b3b;">Zapisano nowe dane.</div>';
  48. echo ($wiadomosc);
  49. sleep(60);
  50. ?>
  51. <table border="0" cellpadding ="1" cellspacing="1">
  52. <tbody>
  53. <tr><td align="center" valign="middle"><img src="http://lector.t15.org/skrypty/sygnatura.php" /></td></tr>
  54. </tbody>
  55. </table>
  56. <?
  57. mail('konstal81@gmail.com', 'Sygnatura', $wiadomosc);
  58. }
  59. }
  60. $dane = ($data .'||'. $wiadomosc);
  61.  
  62. $old = file_get_contents('/home/u699983519/public_html/dane/aktualizacja.txt');
  63. $old = ($dane. "\n" .$old);
  64. file_put_contents('/home/u699983519/public_html/dane/aktualizacja.txt',$old);
  65.  
  66. ?>
  67. </center>
  68. </body>
  69. </html>


Plik sygnatura.php:
  1. <?
  2. include ('../dane/tabela.php');
  3.  
  4. $stoczone_bitwy = $tabela[data][summary][battles_count];
  5. $zwycięstw = $tabela[data][summary][wins];
  6. $przezytych = $tabela[data][summary][survived_battles];
  7.  
  8. //$zwycięstw_procentowo = (round(($zwycięstw / $stoczone_bitwy) * 100) .'%');
  9. //$przezytych_procentowo = (round(($przezytych / $stoczone_bitwy) * 100) .'%');
  10.  
  11. $stoczone_bitwy = number_format($stoczone_bitwy, 0, ',', ' ');
  12. $zwycięstw = number_format($zwycięstw, 0, ',', ' ');
  13. $przezytych = number_format($przezytych, 0, ',', ' ');
  14.  
  15. //$zwycięstw = ($zwycięstw.' ('.$zwycięstw_procentowo.')');
  16. //$przezytych = ($przezytych.' ('.$przezytych_procentowo.')');
  17.  
  18.  
  19. $nazwa = $tabela[data][name];
  20. $klan = $tabela[data][clan][abbreviation];
  21. if (!empty($klan)){
  22. $nazwa = ($nazwa.' '.$klan);
  23. }
  24. $beta_tester = ('Beta Tester');
  25.  
  26. function linia_tekstu ($czcionka_wielkosc, $polozenie, $y, $tekst) {
  27.  
  28. global $sygnatura, $czcionka, $bialy, $czarny, $szary;
  29.  
  30. switch ($polozenie) {
  31. case "lewa":
  32. $x = 4;
  33. break;
  34. case "srodek":
  35. $polozenie = imagettfbbox($czcionka_wielkosc, 0, $czcionka, $tekst);
  36. $polozenie = ($polozenie[4] - $polozenie[6]);
  37. $x = (81 - ($polozenie / 2) + 0);
  38. break;
  39. case "prawa":
  40. $polozenie = imagettfbbox($czcionka_wielkosc, 0, $czcionka, $tekst);
  41. $polozenie = ($polozenie[4] - $polozenie[6]);
  42. $x = (162 - 4 - $polozenie);
  43. break;
  44. }
  45.  
  46. imagettftext($sygnatura, $czcionka_wielkosc, 0, $x - 1, $y, $czarny, $czcionka, $tekst);
  47. imagettftext($sygnatura, $czcionka_wielkosc, 0, $x, $y - 1, $czarny, $czcionka, $tekst);
  48. imagettftext($sygnatura, $czcionka_wielkosc, 0, $x + 1, $y, $czarny, $czcionka, $tekst);
  49. imagettftext($sygnatura, $czcionka_wielkosc, 0, $x, $y + 1, $czarny, $czcionka, $tekst);
  50. imagettftext($sygnatura, $czcionka_wielkosc, 0, $x, $y, $szary, $czcionka, $tekst);
  51. }
  52.  
  53. $linia_danych = 13;
  54. $linia_beta_tester = 82;
  55. $linia_nazwa_klan = 97;
  56.  
  57. header("Content-type: image/png");
  58.  
  59. $sygnatura = ImageCreateFromPng('../obrazki/avatar.png');
  60. $bialy = ImageColorAllocate($sygnatura, 255, 255, 255);
  61. $czarny = ImageColorAllocate($sygnatura, 0, 0, 0);
  62. $szary = ImageColorAllocate($sygnatura, 240, 240, 240);
  63. $czcionka = '../czcionki/verdana.ttf';
  64.  
  65. linia_tekstu (8, lewa, $linia_danych, $stoczone_bitwy);
  66. linia_tekstu (8, srodek, $linia_danych, $zwycięstw);
  67. linia_tekstu (8, prawa, $linia_danych, $przezytych);
  68. linia_tekstu (7, srodek, $linia_beta_tester, $beta_tester);
  69. linia_tekstu (9, srodek, $linia_nazwa_klan, $nazwa);
  70.  
  71. $obrazek = imagecreatetruecolor(160, 100);
  72. imagecopyresized($obrazek, $sygnatura, 0, 0, 0, 0, 160, 100, 162, 102);
  73.  
  74. imagepng($obrazek);
  75. imagepng($obrazek, '../wygenerowane/sygnatura.png');
  76. imagedestroy($sygnatura);
  77. imagedestroy($obrazek);
  78. ?>


Przy takich danych plik cron.php wykonuje się poprawnie, ale jest problem z generowaniem obrazku z pliku sygnatura.php. Jest on wstawiony jako zwykły obraz w pliku cron.php (<img src="http://lector.t15.org/skrypty/sygnatura.php" />).
Nie wiem czy jest to poprawnie zrobione, ręcznie chodzi. Docelowo ma być jeszcze jeden skrypt do genorowania drugiego obrazka.

W jaki sposób wstawić w cron.php kolejne skrypty do wykonania?
nospor
Normalnie ci działa, bo normalnie odpalasz to przez przeglądarke a przeglądarka interpretuje IMG (czyli HTML)
Zaś konsola php nie interpretuje w żaden sposób kodu HTML
sznoorek
To w jaki sposób wstawić skrypt sygnatura.php do cron.php aby go wykonał?
Przekierowanie nie w chodzi w grę bo jak pisałem będzie też drugi skrypt do generowania drugiego obrazka.
nospor
Ale nie bardzo rozumiem co ty chcesz osiągnąć... w pliku cron.php generujesz kod html, który idzie na wyjście, ale ty tego kodu i tak nie widzisz, bo jest przecież odpalany z crona.
sznoorek
Skrypt sygnatura.php generuje i zapisuje obrazek (sygnatura.png), jeżeli skrypt cron.php wykryje ze są nowe dane to je zapisuje i ma uruchomić skrypt sygnatura.php aby ten ponownie wygenerował nowy obrazek sygnatura.png z nowo nałożonymi danymi.
Co mam wstawić zamiast kodu html w cron.php, aby przeszło generowanie obrazka w sygnatura.php?
nospor
A, czyli ty chcesz poprostu odpalić skrypt sygnatura.php smile.gif

To poprostu zrób include('sygnatura.php') smile.gif
sznoorek
Ok teraz pobrał nowe dane i wygenerował obrazek, ale nie wykonał:
  1. mail('konstal81@gmail.com', 'Sygnatura', $wiadomosc);
  2. }
  3. }
  4. $dane = ($data .'||'. $przed .''. $wiadomosc .'' . $po);
  5.  
  6. $old = file_get_contents('../dane/aktualizacja.txt');
  7. $old = ($dane. "\n" .$old);
  8. file_put_contents('../dane/aktualizacja.txt',$old);


Czyli muszę wstawić kod wyżej i zapis $dane przerobić na funkcję, aby nie powtarzać przy każdej opcji.
nospor
A po czym wnioskujesz że nie wykonał? Powinien wykonać.

Odpal ten skrypt z konsoli zamiast z crona, to zobaczysz ewentualne błędy jeśli są
sznoorek
Nie wykonuje przez:
  1. header("Content-type: image/png");

w sygnature.php, spróbuje czy bez podania nagłówka wygeneruje.
nospor
To nie ma nic do rzeczy. Ten header nie powoduje przerwania wykonania kodu.
sznoorek
Includowany plik po wykryciu tego nagłowka chce wyświetlić obrazek i otrzymuje się komunikat o błedzie i nie można wyświetlić obrazka, a pozostały kod w cron.php już nie był wykonywany.
Po usunięciu nagłówka wygląda ze działa wszystko poprawnie.
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.