ночной идеотизм PHP: <?php /** * Абстрактный класс для * реализации кеширования * @author padaboo */ abstract class ACache { /** * данные предназначенные для кеширования * @var mixed $cache */ protected $cache = null; /** * время протухания * в секундах * @var int $updateTime */ protected $updateTime = null; /** * нужно или не нужно кешировать * @var bool $needCache */ protected $needCache = null; /** * читаем кеш * в $this->cache; */ abstract protected function read(); /** * сохраняем кеш */ abstract protected function save(); /** * удаляем кеш по хешу */ abstract protected function delete(); /** * проверка на время устаревания * @return bool */ abstract protected function checkByTime(); /** * существует ли кеш * @return bool */ abstract protected function cacheExists(); /** * получить кеш */ abstract protected function getCache(); } ?> PHP: <?php /** * Итерфейс предназначен для * всех объектов подлежащих * кешированию * @author padaboo */ interface ICached { /** * Должна возвращать хеш объекта * @return string */ public function getHashCode(); /** * Должна возвращать кеш объекта * @return mixed */ public function getCache(); } ?> PHP: <?php /** * Класс предназначенный для кеширования * шаблонов и подшаблонов * @author padaboo */ include_once 'ACache.php'; class TemplateCache extends ACache{ /** * @var string $path; * путь до папки с кешем */ private $path = 'tpl/cache/'; /** * @var object $template implements ICached; */ private $template = NULL; /** * Конструктор * время обновления в минутах * @param int $updateTime * Объект нашего шаблонизатора, * должен реализовывать интерфейс * ICached * @param object $template */ public function exe($template , $updateTime = null) { $this->template = $template; $this->path .= $this->template->getHashCode(); $this->updateTime = $updateTime * 60; return $this->getCache(); } /** * Реализация абстрактного метода read * класса ACache * читаем кеш в $this->cache */ protected function read(){ $this->cache = file_get_contents($this->path); } /** * Реализация абстрактного метода read * класса ACache */ protected function save(){ file_put_contents($this->path, $this->cache); } protected function delete(){ } /** * проверяем по дате создания файла * нужно ли кешировать * @return bool */ protected function checkByTime(){ if($this->updateTime != null){ $time = time(); $rottenTime = filemtime($this->path) + $this->updateTime; return ($time > $rottenTime) ? true : false ; } return false; } /** * проверяет существует ли файл с кешем * @return bool */ protected function cacheExists(){ if(!file_exists($this->path)){ touch($this->path); chmod($this->path, 0644); return true; } return false; } /** * возвращает кеш * @return mixed $this->cache */ protected function getCache() { if($this->cacheExists() || $this->checkByTime()){ $this->cache = $this->template->getCache(); $this->save(); } else { $this->read(); } return $this->cache; } } ?> PHP: <?php /** * Шаблонизатор * @author padaboo */ include_once '/../cache/Icached.php'; class Template implements ICached{ /** * путь до шаблона * @var string */ private $path; /** * переменные * @var array */ private $vars; /** * перегрузка метода * @return method */ function compile() { $args = func_get_args(); $num = func_num_args(); if (method_exists($this, $method ='compile' . $num)) { return call_user_func_array(array($this, $method), $args); } } /** * @param string $path * @param array $vars * @return string шаблон */ public function compile2($path, $vars = array()) { $this->path = $path; $this->vars = $vars; return $this->compile0(); } /** * @param string $path * @param array $vars * @return $this */ public function compile3($path, $vars = array()) { $this->path = $path; $this->vars = $vars; return $this; } /** * @return string шаблон */ public function compile0() { extract($this->vars); ob_start(); include($this->path); return ob_get_clean(); } /** * возвращает хеш шаблона * @return string */ public function getHashCode(){ return basename($this->path, ".html") . "_" . md5(serialize($this)); } /** * @return string шаблон */ public function getCache() { return $this->compile0(); } } ?> PHP: <?php $template = new Template; $cache = new TemplateCache(); $name = 'Vasia'; $age = 1000; $man = $cache -> exe( $template->compile( 'tpl/test.html', array( 'array' => array( $name, $age)), 'cache'), 1); echo $template->compile('tpl/test.html', array('array' => array('Super', $man))); HTML: <table> <?php foreach($array as $value):?> <tr> <td> <?php echo $value; ?> </td> </tr> <?php endforeach;?> </table>
Может и по миру до гигабита, но скорее всего где-то собака зарыта (типа минуту гигабит, а потом как мегабайт скачаешь скорость понижают до хз какого уровня...)
Vladson та не, если наипаловка какая-то, то просто пишут что высокоскоростной инет, а там хрен поймешь - какая скорость заявлена и какая реальная. Я мало верю что дадут гигабит, но и не верю что пров может обманывать. По крайней мере разумный предел - это не менее 70% от того гигабита. Хотя мож там под понятием "в обоих направлениях" имеется ввиду по украине, а не мир.
Кстати вопрос... Постраничную разбивку кто как делает ? Типа ?start=10/20 или ?page=1/2/3 ? (в коде реализуется совершенно одинаково, по этому ответ "что проще то и юзать" как-то совершенно не подходит, интересует именно "мораль")
У меня page=1/2/3, мне кажется так как-то "правильнее", если про постраничную разбивку говорить. Хотя в принципе разницы особой нет
кстати, посмотрел седня пиратку - Пила 7. уйня вобщемто, освновной перс не сдох и, видимо, будет еще одна часть. Не особо торкнуло, потому и смотреть разве что на свое усмотрение.
Пишу класс для обработки и логирования ошибок, что нужно в debug, есть мысль выводить саму ошибку и файл через highlight_string, что то в голову больше ничего не идет, print_r $_REQUET $_FILES $_COOKIE и т.п. ?
Да лоховской отстой это, о чем ты. Я даже мордой ни разу не скрутился, смотря как там чето отрезают себе. Первые части были пострашнее. А это уже тьфу.. сериал какойто. Зря пожеванные сухарики