CakePHP」カテゴリーアーカイブ

CakePHP + jQuery elFinderでWEB上ファイル管理

web上でファイル管理ができないかなって思っていたところ、elFinderなるものをみつけた。
これをCakePHPに組み込んでみました。別にCakePHPである必要はないのですが。。

作成イメージ

普通に設定すると、クローラーに参照されたり、ファイルのアドレスを直接入力されるとみえてしまいます。
ここでは、ファイルの管理画面にはログインが必要であることを想定します。
保存先のディレクトリにBasic認証をかけて、サイトにログイン状態であれば、Ajaxを利用し自動でBasic認証するようにします。

必要な環境

  • php
  • jQuery,jQuery UI

Download

ここから

ダウンロードしたものをwebrootの適当な場所に配置する。
展開するとjs,css,imageのようなフォルダができるのでそれをそのまま配置していけばOK。

設定

設定は上記のサイトおよび、展開したファイルのに含まれるサンプルのhtmlを参照。

ファイルの保存先

webroot/hoge
.htaccessでBasic認証をかけます。

自動で認証

下記のサイトのライブラリをそのまま使用しました。
Ajaxで基本認証+SSL

/app/view/elfinder/index.ctp

<script>
    $().ready(function(){
        // 引数には適当な値を入力して下さい。user,passwordがBasic認証に必要なユーザ名とパスワードです。
        sendRequest(callback,data,method,url,async,sload,user,password);
        // 以下、elfindeの処理
        ..........
    });
</script>

ユーザ名とパスワードをそのまま記載するのはあまりよろしくないと思うので、
/app/controllers/elfinder_controller.php

.....
function get_basic(){
    $this->layout = 'ajax';
    // ユーザ名とパスワードを返す処理
    // e.g.
    $data = array('user' => 'hogehoge', 'passwd' => '********');
    header('Content-type: application/json; charset=UTF-8’);
    echo json_encode($data);
}
.....

等の処理をPHP側にいれ、ajaxでデータを取得すればよいかと思います。

これでファイルの管理画面にアクセスしたときに、Basic認証のダイアログを出すことなくアクセス出来るようになると思います。

最初に直接ファイルのアドレスを打って、ダイアログが出ることたしかめ、
サイトからアクセスすると出ないことを確認した方がいいかもしれません。

ブラウザを閉じると、Basic認証が解除されるので、再び直接アクセスするとダイアログが表示されるはずです。

もっといい方法を知っている方がいれば教えてください。

CakePHP1.3 Netbeansでhelperの変数を変更

CakePHP1.3からはHelperの使い方が若干かわりました。

とはいっても、以前のままで動きはするのですが。。。

なんだか全部統一しないと気持ちが悪いって人は、Helperの変数を全部変更したいと思うかもしれません。

でも、grepとかして全部修正するのは大変そう。

Netbeansだとhelperの変数を一気に変更できます。
※間違えて他のところもかえちゃったって言う場合もあるかもしれないので、自己責任で行ってください。

変更方法

  • 変更したいhelperの変数があるviewファイルを開く
  • 変数名の上にカーソルをあわせる(e.g. $html, $form)
  • [Ctr] + [R]

すると以下のダイアログが開くので新しい変数名を入力します。
e.g. this->Html , this->Form, …

[preview]ボタンをクリックすると、プロジェクト内のほかのファイルの変数も検索してくれます。
見つけた箇所がツリー上に表示されます。

また、該当箇所のコードも見ることができます。
該当しないところはチェックボックスをはずしてリファクタリングすればOKです。

CakePHP MediaPluginを使った携帯からの画像アップロード

概要

詳しいコードは、省略しています。
MediaPluginを使って携帯からの画像をアップロードしたときのことをメモしておく。
携帯からの画像アップロード方法は次の2通り。

  • 画像をメールに添付する
  • PCと同じ方法(inputタグのfile属性を使う)

2番目の方法は、対応しているものとしていないものがある。
まだ対応しているものは少ないと思われる。

環境(使用するもの)

  • CakePHPのShell
  • MySQL
  • MediaPlugin
  • メールサーバ
  • QdmailReciever

完成イメージ

完成イメージ

処理概要

  1. メールにファイルを添付し、登録用のアドレスに送信
  2. 受け取ったメールをCakeのShellで処理
  3. 登録用のアドレスを記載したメールを返信
  4. htmlから画像を登録
  5. fileをMediaPluginで処理

準備

  • MySQLに仮登録用の適当なテーブルを作成し、画像のデータを登録するフィールドを作成(BLOB型)する。
  • メールを送信してもらうアドレスを作成する。(nologin)
  • 作成したアドレスに画像を添付したメールを送信してもらう。

仮登録:サーバ側の処理

  • 受信したメールをShellに渡す。
  • QdmailRecieverを使って、メールの内容を取り出す。
  • 必要なデータをDBに仮登録する。
  • 登録用のURLの作成し、メールを返信。

登録

  • ユーザにURLにアクセスしてもらう。
  • このときにDBに保存していたデータから、画像を作成
  • 登録のボタンを押下してもらう。
  • 一時ファイルの削除などの後処理

気をつけるべきことは次の2つ!!

  1. ファイル保存用のテーブルのfileフィールドにファイルのパスを記載する。
  2. ファイルを作成するのは、ユーザが指定したURLにアクセスしたとき。

2の理由は、Shellで処理するときにファイルを作成すると、ファイルの所有者がnobodyになってしまい、サーバー側で後でファイルの削除が出来なくなるためです。

photo_regist_controller.php

<?php
// ・・・
$this->data['Attachment']['file'] = "ファイルへのパス"
// e.g. "/tmp/hoge.jpg"
?>