この記事では、PHP変数をファイル形式でキャッシュする方法について説明します。皆さんの参考に共有してください。具体的な実装方法は以下の通りです
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 |
/* $cache_set = 配列( //キャッシュパス、最後に「/」を追加します 'cacheRoot'=>'./cache/', //キャッシュ時間 'cacheTime'=>20, //キャッシュタイプ 'cacheType'=>1, //拡張子 'cacheExe'=>'.php' ); $cache = 新しいキャッシュ($cache_set); $a=配列('1','2'); $a="ああ"; $b=''; if($cache->cache_is("d")){ $c=$cache->cache_read("d"); エコー「c」; print_r($c); }その他{ $b=$cache->cache_data('d',$a); } print_r($b); //$cache->clear("a"); //echo $cache->cache_read("./cache/d.php"); //エコー $d; */ /** * データ キャッシュ クラス v1.0 * @著者shake * 2009-11-13 16:02:26 * 変数などのデータをキャッシュするために使用されますが、ページをキャッシュすることはできません */ クラスキャッシュ{ //構成 パブリック $config = array( //キャッシュパス 'cacheRoot'=>'./cache/', //キャッシュ時間 'cacheTime'=>1, //キャッシュ タイプ 1 シリアル化データ 2 変数 'cacheType'=>2, //拡張子 'cacheExe'=>'.php' //中間変数を変換する ); パブリック $return_name=array(); 関数 __construct($cache_set = array()) { if(!empty($cache_set)) $this->config=array_merge($this->config,$cache_set); $this->config['クラス名'] = __CLASS__; } パブリック関数clear($filename=''){ if (file_exists($this->cache_file($filename))) { @unlink($this->cache_file($filename)); }elseif (空($filename)){ $this->clear_dir($this->config['cacheRoot']); }その他{ $this->clear_dir($this->config['cacheRoot'].$filename); echo $this->config['cacheRoot'].$filename; } } //ループ削除パス プライベート関数clear_dir($dir,$to = false) { if ($list = glob($dir.'/*')) { foreach ($list を $file として) { is_dir($file) ? $this->clear_dir($file) : unlink($file); } } if ($to === false) rmdir($dir); } //ライトキャッシュ プライベート関数cache_write($filename, $writetext, $openmod='w'){ if (!file_exists($filename)) { @$this->makeDir( dirname($filename )); } if(@$fp = fopen($filename, $openmod)) { flock($fp, 2); fwrite($fp, $writetext); fclose($fp); true を返す; } 他 { echo "ファイル: $filename 書き込みエラー。"; false を返す; } } //キャッシュの有効期間が有効であれば true を返します パブリック関数cache_is($fileName){ $fileName=$this->cache_file($fileName); if( file_exists( $fileName ) ) { //キャッシュ時間が負の数の場合、有効期限は切れません if ($this->config['cacheTime'] true を返す; } //キャッシュ時間が 0 の場合、常に期限切れになります if ($this->config['cacheTime'] == 0) { false を返す; } //キャッシュファイルの作成時刻を取得します $ctime = intval(filemtime( $fileName )); //キャッシュ時間より大きいかどうかを比較し、大きい場合は期限切れになり、そうでない場合は期限切れになりません if (time() - $ctime > $this->config['cacheTime']) { false を返す; }その他{ true を返す; } //ファイルは存在しないため、期限切れとみなされます }その他{ false を返す; } } パブリック関数cache_data($name,$data){ $varname=$name; $name = $this->cache_file($name); //config['cacheTime']==0 は、キャッシュが有効になっておらず、データが直接返されることを意味します if ($this->config['cacheTime'] <> 0) { if($this->config['cacheType']==1){ $write_data = "".serialize($data); //$data を返す; }その他{ $write_data = " $write_data .= var_export($data,true); $write_data .=";\r\n?>"; } $this->cache_write($name,$write_data); } $data を返す; } //缓存文件名 プライベート関数cache_file($filename){ return $this->config['cacheRoot'].$filename.$this->config['cacheExe']; } //读取文件 パブリック関数cache_read($file){ $file=$this->cache_file($file); if (!file_exists($file)) { 戻る ''; } if($this->config['cacheType']==1){ if (function_exists('file_get_contents')){ $cache_Content= file_get_contents($file); }その他{ $fopen = fopen($file,'r'); $cache_Content = ''; する{ $data = fread($fopen,filesize($file)); if (strlen($data)===0) ブレーク; $cache_Content .= $data; }ながら(1); fclose($fopen); } $cache_Content = substr($cache_Content,13);/* 削除 */ $cache_Content = unserialize($cache_Content); $cache_Content を返す; }その他{ include_once($file); $var を返す; } } //循環环创建目录 プライベート関数 makeDir( $dir, $mode = 0777 ) { if( ! $dir ) return 0; $dir = str_replace( "\\", "/", $dir ); $mdir = ""; foreach(explode( "/", $dir ) as $val ) { $mdir .= $val."/"; if( $val == ".." || $val == "." || トリム( $val ) == "" ) 続行; if( ! file_exists( $mdir ) ) { if(!@mkdir( $mdir, $mode )){ false を返す; } } } true を返す; } } ?> |
ここで説明されている大家向けの php プログラムの設計が役立つことを希望します。
http://www.bkjia.com/PHPjc/1022063.html