.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
14 人のユーザが現在オンラインです。 (13 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 14

もっと...

.
.リンク集

メイン
   CakePHP ビュー(View)
     Viewキャッシュでの日本語アクション名の対処
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
showBOO
投稿日時: 2009-2-14 23:40
Baker スタート
登録日: 2008-12-26
居住地: 広島
投稿: 14
Viewキャッシュでの日本語アクション名の対処
showBOOと申します。

質問をよろしいでしょうか。


viewでファイルキャッシュをやろうと思い、以下のようなコードを組みました。


<?php
class SearchesController extends AppController {
 var 
$name 'Items';
 var 
$uses = array('Item','Keyword','Genrecode');
 var 
$helpers = array ('Html','Form','Cache');
 var 
$cacheAction '+1 day';


 function 
index(){
 (中略)
 
}

}
?>



このとき、リクエストURLとして、
http://hogehoge/searches/index/%E3%82%AF%E3%83%9E/2

という風にURLエンコードされた日本語を含むパラメータが渡されると、
キャッシュ動作がうまくいきません。

なにか対応策はありますでしょうか?

MASA-P
投稿日時: 2009-2-15 0:21
Cake 職人
登録日: 2008-1-24
居住地:
投稿: 224
Re: Viewキャッシュでの日本語アクション名の対処
app/config/core.php内の「Configure::Cache.check」をtrueにしてありますでしょうか?

キャッシュに関する設定をマニュアルで再度確認してみてください。

▼7.2.3 キャッシュヘルパーの設定
http://book.cakephp.org/ja/view/345/キャッシュヘルパーの設定
showBOO
投稿日時: 2009-2-15 1:26
Baker スタート
登録日: 2008-12-26
居住地: 広島
投稿: 14
Re: Viewキャッシュでの日本語アクション名の対処
はい。
「Configure::Cache.check」はtrueにしてあります。
他の、日本語ではないアルファベットや数字のURLに対しては正常にキャッシュ動作をしています。
MASA-P
投稿日時: 2009-2-15 2:18
Cake 職人
登録日: 2008-1-24
居住地:
投稿: 224
Re: Viewキャッシュでの日本語アクション名の対処
こちらで試してみましたが、日本語パスでも問題なく動きますね。

気になるのは、$nameにコントローラ名と違う名前が入っていることです。これが原因のような気がします。
キャッシュがある場合はコントローラ名で探しますが、ない場合は$nameの名前のビューを探しに行くようですので、キャッシュが期限切れになるとエラーが出ると思います。
試しに、tmp内のビューキャッシュを消してから、いきなり日本語URLで確認してみてはいかがでしょう?
showBOO
投稿日時: 2009-2-15 9:52
Baker スタート
登録日: 2008-12-26
居住地: 広島
投稿: 14
Re: Viewキャッシュでの日本語アクション名の対処
>気になるのは、$nameにコントローラ名と違う名前が入っていることです。これが原因のような気がします。

申し訳ありません。記述間違えでした。

正しくは、

<?php
<?php
class SearchesController extends AppController {
 var 
$name 'Searches';
 var 
$uses = array('Item','Keyword','Genrecode');
 var 
$helpers = array ('Html','Form','Cache');
 var 
$cacheAction '+1 day';
 function 
index(){
 (中略)
 
}

}
?>
?>


です。

ローカルのWindowsのXAMPPで動かしているときは正しく動いたのですが、本番環境のLinuxに移動したら動作しなくなりました。

試しに、日本語をいきなりパラメータとして渡したのですが、

tmp/cache/viewsの中には、キャッシュファイルとして、
searches.php
となってしまい、
searches_日本語.php
とはなりません
MASA-P
投稿日時: 2009-2-15 13:16
Cake 職人
登録日: 2008-1-24
居住地:
投稿: 224
Re: Viewキャッシュでの日本語アクション名の対処
引用:

showBOOさんは書きました:
ローカルのWindowsのXAMPPで動かしているときは正しく動いたのですが、本番環境のLinuxに移動したら動作しなくなりました。

試しに、日本語をいきなりパラメータとして渡したのですが、

tmp/cache/viewsの中には、キャッシュファイルとして、
searches.php
となってしまい、
searches_日本語.php
とはなりません


すみません。
自分の方で実行結果を勘違いしていました。
確かに日本語URLですとパスがすっぽり抜けますね!

原因を調べてみましたが、どうやら、パスを加工してファイル名にする段階で使用しているInflector::slug()がマルチバイトに対応していないのが原因のようです。

いろいろ修正を試みてみたんですが、preg_replace()を使っている限り難しいかも…

というわけでチケットを出しておきました(人生初チケットです!)。

▼Inflector::slug() converts path to string without multibyte words.
https://trac.cakephp.org/ticket/6104
dky24
投稿日時: 2009-2-15 14:07
Baker スタート
登録日: 2008-12-17
居住地:
投稿: 4
Re: Viewキャッシュでの日本語アクション名の対処
初めまして。
自分も以前に同じ問題で悩んだことがあったんですが、
そのときは、何らかのユニークなキーとなる英数字を作って、URLにくっつけてやることで済ませました。

日本語部分がInflector::slug で切られてもユニークな英数字が残っていればキャッシュのファイル名が変わるからです。

ただ、既存のモデルから記事を読み出す・・・とかの場合は、記事のIDなどをキーにできますけど、showBOOさんのURLから察すると、検索用のキャッシュなのでしょうか?
その場合、ユーザーが入力した検索文字からキーを作るのに何かワンクッション必要かもしれないですね。

Inflectorを改造してマルチバイトを通すように・・・とも考えたのですが、
ファイル名に日本語を通しちゃうと、OSやファイルシステムが変わったらうまく動かない場合があるかもしれないと思い止めました。エンコードしてあれば大丈夫なのかもしれませんが。
showBOO
投稿日時: 2009-2-15 18:14
Baker スタート
登録日: 2008-12-26
居住地: 広島
投稿: 14
Re: Viewキャッシュでの日本語アクション名の対処
>MASA-Pさん

>原因を調べてみましたが、どうやら、パスを加工してファイル名にする段階で使用しているInflector::slug()がマルチバイトに対応していないのが原因のようです。

なるほど。
Cakeへの報告ありがとうございます。

>dky24さん

>ただ、既存のモデルから記事を読み出す・・・とかの場合は、記事のIDなどをキーにできますけど、showBOOさんのURLから察すると、検索用のキャッシュなのでしょうか?

そうです。
検索用の文字列です。
クエリーキャッシュとかを使えば良さそうですが、DBは使っておらず、WEB-APIのみのシステムなので・・・使えません。

バグフィクスを待った方がよいでしょうか。
MASA-P
投稿日時: 2009-2-19 1:38
Cake 職人
登録日: 2008-1-24
居住地:
投稿: 224
Re: Viewキャッシュでの日本語アクション名の対処
「Enhancement Tickets」に変更されてしまったので、たぶん直るのにとても時間がかかるか、重要でないと判断された場合はクローズされてしまう可能性が高いです。
たぶんいつまで経っても実装できなくなってしまうと思いますので、dky24さんのおっしゃるような、別の方法を考えられた方が良いかもしれませんね。

ちなみにinflector.phpは、日本語圏のエディタだとコードを修正保存した場合、中の文字を壊してしまってPHPエラーが出やすいので、修正はかなり難しいです。
showBOO
投稿日時: 2009-2-20 0:31
Baker スタート
登録日: 2008-12-26
居住地: 広島
投稿: 14
Re: Viewキャッシュでの日本語アクション名の対処
そうですか。
なにか別なアプローチを考えてみます。
お手数をおかけしました。

ありがとうございました。
(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .