cakephp: принудительно разгрузить / закрыть соединения - PullRequest
1 голос
/ 10 февраля 2012

У меня проблема с производительностью в Cake, генерирующем изображения.Проблема заключается в том, что при вызове функции контроллера Cake устанавливает соединение с БД, и изображения загружаются в режиме «синхронизация», ожидая закрытия последнего соединения (загрузка изображения на изображение с ожиданием 0,5 секунды).Вот мой контроллер:

class ThumbnailController extends AppController {
    var $uses       = null;
    var $components = array();
    var $autoRender = false;


    ###########################################################
    # PUBLIC
    ###########################################################

    public function thumb($folder = null, $w=0, $h=0, $filename=null){
        $this->thumbnail("default.jpg", $folder, $w, $h, $filename);
    }

    public function thumbMama($folder = null, $w=0, $h=0, $filename=null){
        $this->thumbnail("iconopersonadh.png", $folder, $w, $h, $filename);
    }

    ###########################################################
    # PRIVATE
    ###########################################################

    private function thumbnail($default_image, $folder = null, $w=0, $h=0, $filename=null){

        session_write_close();

        $img = WWW_ROOT.DS.$folder.DS.$filename;

        if(!is_file($img)){
            $img = WWW_ROOT.DS."img".DS.$default_image;
        }

        $img_info    = pathinfo($img);
                $filename    = $img_info["filename"];
                $extension   = strtolower($img_info["extension"]);
        $tn_filename = "tn-".$filename."-".$w."x".$h.".".$extension;

        switch($extension){
            case "gif":
                header('Content-type: image/gif');
            break;
            case "png":
                header('Content-type: image/png');
            break;
            default:
                header('Content-type: image/jpeg');
            break;
        }

        # COMPROBAMOS SI EXISTE UNA IMAGEN CACHEADA PARA NO GENERAR EL RECORTE AL VUELO
        if(is_file(WWW_ROOT.DS."files".DS."tn".DS.$tn_filename)){
            readfile(WWW_ROOT.DS."files".DS."tn".DS.$tn_filename);
        }else{

            $magic = new Imagick($img);
            $magic->cropThumbnailImage($w, $h);
            $magic->writeImage(WWW_ROOT.DS."files".DS."tn".DS.$tn_filename);
            echo $magic;

            //$this->log($img_info["basename"]." ---> ".$tn_filename, 'thumbnails-'.date("Ym"));
        }
    }

Мне нужно заставить CakePHP не загружать никакие БД и не устанавливать соединение, чтобы заставить функцию создавать только код без «задержки».

1 Ответ

0 голосов
/ 10 февраля 2012

Если вы поместили (или уже сделали) это действие в отдельный контроллер, просто поместите в его модель следующее, чтобы избежать любых операций с базой данных:

class Thumbnail extends AppModel {

    public $useTable = false; // Don't use any db table

}

Более подробную информацию об этом можно найти в Поваренной книге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...