2012-02-10 10 views
1

イメージを生成するCakeでパフォーマンス上の問題があります。問題はコントローラの機能がCakeと呼ばれてDBに接続し、画像が最後の接続を閉じるのを待っている "同期"にロードされているときです(0.5秒の待機時間で1画像あたりの画像)。cakephp:強制的にアンロード/クローズ接続を行います。

ノー「遅れ」を持つ唯一のコードを作成する機能を強制的に、任意のDBをロードしないようにCakePHPのを強制したり、接続を作成する必要があり
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")); 
     } 
    } 

は、ここに私のコントローラです。あなたが別々のコントローラでこのアクションを入れて(またはすでに持っている)場合は、どのデータベース操作を避けるために、モデルの中で

+0

私はこの問題がcakephpにないと思います。このプロセスを経る多くの画像がある場合はImagickが使用されていますが、このプロセスが可能であることが期待されます。 –

+0

しかし、画像が生成されると、readfile()でサムネイルを読み込み、Imagemagickを使用せず、 – Zenth

+1

私は解決策を見つける!!!! "ThumbnailControllerクラスがAppControllerを継承しています" {"ThumbnailController extends Controller {"、これによりロードが即座に実行されます。 – Zenth

答えて

0

は、単に次のように置く:これについて

class Thumbnail extends AppModel { 

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

} 

詳細はthe Cookbookです。

関連する問題