Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Klasa cachujaca dziala niepoprawnie
Forum PHP.pl > Forum > Gotowe rozwiązania
Bojakki
Uzylem funkcji Zyxa do cachowania danych:
Sprawa wyglada tak:
Przy pierwszym zaladowaniu strony tworzy sie plik cache i jest wszystko w porzadku. Dane w srodku pliku sa i wygladaja na poprawne. odswiezam strone i ta przestaje sie ladowac w momencie pobierania pliku z katalogu 'sql_cache'. Na pewno nie jest to problem z dostepem do pliku czy katalogu bo jak zmienie nazwe katalogu lub zmneijsze prawa dostepu do utworzonego pliku cache to wyskakuje mi normlany blad z informacja o tym. A w tym przypadku nie wyskakuje mi anwet zaden blad a jedynie strona przestaje sie ladowac w meijscu gdzie jest scachowane zapytanie. Gdy wyrzuca plik, ktory zostal utworozny po pierwszym wywolaniu zapytania to znowu strona sie raz zaladuje,plik sie utowrzy i strona po zaladowaniu zatrzyma sie w meijscu cachowania zapytania. I takw kolko. Probowalem juz ronzych rzeczy pod php 5 i pod php 4 i lipa:( Bylbym nardzo wdzieczny za jakakolwiek pomoc.

Funckja wyglada tak:
  1. <?php
  2. define('CACHE_DIR', './sql_cache/');
  3.  
  4.  
  5.  class sql{
  6. var $connection;
  7. var $result;
  8. var $rows;
  9.  
  10. var $queries = 0;
  11.  
  12. var $cache_state =0;
  13. var $cache_file;
  14. var $cache_buffer;
  15. var $cache_ptr;
  16.  
  17. function sql_connect($host, $user, $pass, $db){
  18.  $this -> connection = mysql_connect($host, $user, $pass);
  19. }
  20.  
  21. function sql_close(){
  22.  mysql_close($this -> connection);
  23. }
  24.  
  25.  
  26.  
  27. function sql_cache($handle = 0){
  28.  if(is_string($handle)){
  29. if(file_exists(CACHE_DIR.'xxx_'.$handle.'.666')){
  30.  $this -> cache_state  = 1;
  31.  $this -> cache_ptr = 0;
  32.  $this -> cache_buffer = unserialize(file_get_contents(CACHE_DIR.'xxx_'.$handle.'.666'));
  33. }else{
  34.  $this -> cache_state = 2;
  35.  $this -> cache_buffer = array();
  36.  $this -> cache_file = CACHE_DIR.'xxx_'.$handle.'.666';
  37. }
  38.  }else{
  39. if($this -> cache_state == 2){
  40.  file_put_contents($this -> cache_file, serialize($this -> cache_buffer));
  41. }
  42. $this -> cache_state = 0;
  43.  }
  44. }
  45.  
  46.  
  47. function sql_cache_remove($handle){
  48.  if(file_exists(CACHE_DIR.'xxx_'.$handle.'.666')){
  49. unlink(CACHE_DIR.'xxx_'.$handle.'.666');
  50.  }
  51. }
  52.  
  53. function sql_query($query){
  54.  if($this -> cache_state != 1){
  55. $this -> result = mysql_query($query);
  56. $this -> queries++;
  57.  
  58. if(mysql_errno() != 0){
  59.  die('Error: '.mysql_error().'<br/>');
  60. }
  61. return 1;
  62.  }
  63. }
  64.  
  65.  
  66. function sql_fetch_array(){
  67.  if($this -> cache_state == 1){
  68. if(!isset($this -> cache_buffer[$this -> cache_ptr])){
  69.  return 0;
  70. }
  71. $this -> rows = $this -> cache_buffer[$this -> cache_ptr];
  72. $this -> cache_ptr++;
  73. return 1;
  74.  }else{
  75. if($this -> rows = mysql_fetch_assoc($this -> result)){
  76.  if($this -> cache_state == 2){
  77. // Dodaj do cache
  78. $this -> cache_buffer[] = $this -> rows;
  79.  }
  80.  return 1;
  81. }
  82.  }
  83.  return 0;
  84. }
  85.  
  86. function sql_fetch_row(){
  87.  if($this -> cache_state == 1){
  88. // czy koniec bufora?
  89. if(!isset($this -> cache_buffer[$this -> cache_ptr])){
  90.  return 0;
  91. }
  92. // odczytaj z bufora
  93. $this -> rows = $this -> cache_buffer[$this -> cache_ptr];
  94. $this -> cache_ptr++;
  95. return 1;
  96.  }else{
  97. if($this -> rows = mysql_fetch_row($this -> result)){
  98.  if($this -> cache_state == 2){
  99. // Jeśli tworzymy cache, musimy rekord dodatkowo zapisac w buforze
  100. $this -> cache_buffer[] = $this -> rows;
  101.  }
  102.  return 1;
  103. }
  104.  }
  105.  return 0;
  106. }
  107.  
  108.  } // koniec klasy
  109. ?>


Tak wyglada scachowane zapytanie:
  1. <?php
  2. include("cache.php"); 
  3. $sql = new sql; 
  4. $sql -> sql_connect('host', 'user', 'haslo', 'baza'); 
  5. $sql -> sql_cache('uchwyt'); 
  6. $sql -> sql_query("SELECT name FROM tabela1 WHERE main = '1' ORDER BY id DESC LIMIT 6") or die(mysql_error()); 
  7. while($sql -> sql_fetch_row()) 
  8. { 
  9. $name = $sql -> rows[0]; 
  10. echo $name.'<br />'; 
  11. } 
  12. $sql -> sql_cache();
  13. ?>
dr_bonzo
Przenosze, forum Algorytmy sluzy do przedstawiania wlasnych algorytmow, twoj przypadek to "problem z gotowym skryptem"
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-2024 Invision Power Services, Inc.