Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: atom + chachowanie
Forum PHP.pl > Forum > PHP
grzegorz_g
stworzyłem sobie plik atom.php, który dynamicznie generuje kanał atom. Jednak czytałem troche, że muszę cachowac ten kanal - niestety nie wiem w którym miejscu mam wpisac te nagłowki:

Last-Modified, If-Modified-Since,

narazie w nagłowku pliku atom.php mam

  1. <?php
  2. header('Content-Type: application/atom+xml; charset=UTF-8');
  3. ?>



co jeszcze potrzebuje zrobić by optymalnie korzystać z kanału atom
nitek
ogólnie kanały atom masz opisane na tej stronie elegancko: http://kurs.browsehappy.pl/Atom/Atom

a tutaj troche więcej o cache: http://www.7plus.pl/kurs-tworzenia-strony/HTTP/Cache.html
grzegorz_g
właśnie to poczytałem wszystko ale nie ma tam zadnego przykałdu i nie zabradzo wiem jak napisać "należy napisać własną obsługę cache"
nitek
tutaj jest opisane chyba wszystko odnośnie cache control: http://www.mnot.net/cache_docs/

ogólnie powinno wystarczyć ci to co wklejam poniżej, bo przecież chodzi o to, by strona nie była cache'owana przez przeglądarkę:

  1. <?php
  2. header("Cache-Control: no-store, no-cache, must-revalidate"); // HTTP/1.1
  3. header("Cache-Control: post-check=0, pre-check=0", false);
  4. header("Pragma: no-cache"); // HTTP/1.0
  5. ?>


  1. <meta name="Pragma" content="no-cache" />
  2. <meta name="Cache-Control" content="no-store, no-cache, must-revalidate" />


od razu powiem, że pod kochanym IE nei zawsze to zadziała, ale to juz jest bug IE i niestety nie zawsze da się to naprawić...
grzegorz_g
nitek: nie wykorzystałem do końca Twoich porad, wyskrobałem coś takiego:

  1. <?php
  2. if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
  3.  
  4. echo "If-Modified-Since: " . $_SERVER["HTTP_IF_MODIFIED_SINCE"];
  5.  
  6.  
  7. } else { 
  8.  
  9. // kod generujący kanał atom
  10.  
  11.  
  12. }
  13. ?>



i teraz nie wiem co wstawić w ten warunek gdy nie nastąpi zmiana w pliku, bo przeglądarka np. IE pokazuje np. If-Modified-Since: Sat, 10 May 2008 19:48:11 GMT no a chce by pokazała zawartośc kanału.

Mam nadzieję ze ktoś mi będzie w stanie pomóc
Za pomoc z góry dzięki.
Kicok
Po pierwsze to nagłówków nie wysyła się przez echo" title="Zobacz w manualu PHP" target="_manual.

Po drugie serwer nie wysyła do przeglądarki if-modified-since. Co najwyżej może wysłać:
Kod
HTTP/1.1 200 OK
Last-Modified: ...data...

albo:
Kod
HTTP/1.1 304 Not Modified
Last-Modified: ...data...
grzegorz_g
ale mi chodzi konkretnie chodzi co wpisać w warunek

  1. <?php
  2. if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
  3.  
  4.  
  5. }
  6. ?>


by pobieralo kanal, bo gdy warunek nie spelniony to mi go tworzy - a problem ze nie wiem co wpoać gdy warunek jest TRUE


może pomoże smile.gif cały kod pliku atom.php

  1. <?php
  2. include ("admin/connect.php");
  3. polacz();
  4.  
  5. $page_data = time();
  6. $last_mod = gmdate('D, d M Y H:i:s', $page_data). ' GMT';
  7. header("Last-Modified: $last_mod");
  8. header("Pragma: public");
  9. header("Cache-Control: public");
  10. header('Expires: 0');
  11.  
  12.  
  13.  
  14. if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
  15. //header("HTTP/1.0 304 Not Modified");
  16. echo "jest If-Modified-Since: " . $_SERVER["HTTP_IF_MODIFIED_SINCE"];
  17. } else { 
  18.  
  19.  
  20. $atom = array('title' =>  'BetPuzzle.com', //Tytul supskrybcji
  21. 'author'  =>  'BetPuzzle.com Team',  //Autor (Czyli Ty tongue.gif)
  22. 'www' =>  'http://www.betpuzzle.com'  //Url do twojej strony
  23. );
  24.  
  25.  
  26.  
  27. $filename = "sciezka_do_pliku/db_analiza.php";
  28. $plik = file($filename);
  29.  
  30. $plik=array_reverse($plik);
  31.  
  32.  
  33. $show = '<?xml version="1.0" encoding="utf-8"?>
  34.  <feed xmlns="http://www.w3.org/2005/Atom">
  35.  <title>' . $atom['title'] . '</title>
  36.  <link href="' . $atom['www'] . '"/>
  37.  <author>
  38. <name>' . $atom['author'] . '</name>
  39.  </author>
  40.  <updated>' .date("Y-m-dTH:i:sP") .'</updated>
  41.  <link rel="self" href="http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'].'" />
  42.  <id>urn:uuid:f2cb82f2-16a5-1029-85eb-f6d54af2e08a</id>';
  43.  
  44. foreach ($plik as $key => $val)
  45. { 
  46. $wiersz = explode("_||_",chop($plik[$key]));
  47.  
  48.  
  49. if ($wiersz[5]==1) {
  50.  
  51.  
  52. $sqlzz="select login, id from konkurs_users where id=".$wiersz[1];
  53. $resultzz = mysql_query ($sqlzz)
  54.  or die ("błąd zapytania ".$sqlzz);
  55. $rowzz = mysql_fetch_array ($resultzz);
  56.  
  57.  
  58. $sql="select data, team1, team2, sport, kk.id as id_k, bs.name as dyscypline from konkurs_kursy kk, bets_sport bs where kk.id=".$wiersz[3]." and kk.data>'".time()."' and kk.sport=bs.id";
  59. $result = mysql_query ($sql)
  60.  or die ("błąd zapytania ".$sql);
  61. $row = mysql_fetch_array ($result);
  62.  
  63.  
  64. if ($row['data']>time()) {
  65.  
  66. switch ($wiersz[4]) {
  67. case 1: $typ="1"; break;
  68. case 2: $typ="x"; break;
  69. case 3: $typ="2"; break;
  70. case 4: $typ="1x"; break;
  71. case 5: $typ="x2"; break;
  72. case 6: $typ="12"; break;
  73.  
  74.  }
  75.  
  76.  
  77.  
  78. $wiersz[0] = stripslashes(str_replace("*/*"," ",$wiersz[0]));
  79.  
  80.  
  81. $show .= '  <entry>
  82.  <title> '. date("d.m.Y",$row['data']) .' '. $row['team1']. ' vs ' .$row['team2']. ' TYP: '.$typ.' '.$_SERVER["HTTP_IF_MODIFIED_SINCE"].'</title>
  83.  <category term="'.$row['dyscypline'].'" label="Dyscypliny" />
  84.  <link href="http://www.betpuzzle.com/index.php?page=view_a&ida=' . $key . '"/>
  85.  <id>urn:uuid:ed1f87ee-16a6-1029-85eb-f6d54af2e08a</id>
  86.  <content>' . $wiersz[0] . ' autor:' . $rowzz['login'] . '</content>
  87.  </entry>';
  88.  
  89. }
  90.  
  91.  
  92. }
  93.  
  94. }
  95.  
  96. $show .= '  </feed>';
  97.  
  98. echo $show; //Wyswietlenie kanalu !
  99.  
  100.  
  101. }
  102. ?>
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.