のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,836人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ【PHP】フレームワーク CakePHP 17ホール目【v3α】

    php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    203 : nobodyさん - 2015/01/17(土) 19:58:26.44 ID:???.net (+17,+29,-3)
    なゆあかか
    204 : nobodyさん - 2015/01/18(日) 01:38:43.72 ID:YMMCDK0S.net (+43,+29,-260)
    すいませんが相談させてください。
    wordpressでとあるポータルサイト(1日のPVは1,000程度)を運営しているのですが、
    今後、数十万件以上(WPのカスタム投稿で)のデータを登録する予定となったので、
    wordpressで構築するのは負荷的に耐えられないのかと思い、
    CakePHPで構築しなおそうと思っています。

    という状況なのですが、CakePHPにしたからwordpressよりも早くなるとは限らず、
    むしろ遅くなる可能性もあるのでしょうか?
    (フレームワークとしてCakeにこだわってはいないので、採用するのは他のフレームでも構いませんが)
    ググってみたりはしたのですが、この比較対象がおかしいということもあるのか、
    比較記事は見当たらず、私自身がCakeの事を本質的に理解出来ていないこともあり、困ってしまっています。
    WPの中で生のSQL文を書いて、直接データ登録・取得・表示するのが良いのかなと
    アホみたいな事も思い始めていますが・・・・

    ちなみに私自身のスキルとしては、以下の感じです。
    DB:基本的に大抵のことは出来て問題無い、テーブル結合とか検索とかの事は生のSQL文を書ける
    PHP:wordpressのテーマを自分でガリガリとカスタマイズして外部からの入力フォーム・表示フォームとかは自分で作成しているが、難しい事は分からない
    HTML・CSS:他サイトを見よう見まねで学んでいる状態で、ちゃんと理解出来ていない事が多い
    205 : nobodyさん - 2015/01/18(日) 01:53:17.52 ID:???.net (+37,+30,-82)
    >>204
    お前は「そんな可能性はない」と言われたらCakePHPにするのか?
    そうじゃないだろう?

    だったらなぜまず試さない?
    試してみて遅かったら、その原因を聞きにくるというのがやり方じゃないか?
    もちろん、聞きにくるときは、それなりの情報を出しながらだが
    206 : nobodyさん - 2015/01/18(日) 13:36:16.56 ID:???.net (+38,+29,-118)
    >>204
    CMSとフレームワークの違いがわかってないのかな?
    wordpressはCMSの部類でコンテンツ管理する仕組みが既に入っているけど
    cakephpみたいなフレームワークは言ってみりゃ単なる便利ライブラリ集だから
    コンテンツ管理する仕組みとかは全部自分で実装しなきゃいけないよ
    207 : nobodyさん - 2015/01/18(日) 17:42:38.18 ID:???.net (+32,+29,-101)
    脆弱性作り込んでそう

    そんなあやふやな知識で博打を打つくらいなら
    DBのチューニングやPHPアクセラレータの導入などしてWordPressの高速化をはかるほうがマシだと思う
    翻訳止めるだけでも結構速くなるしな

    DBからの読み出しメインのサイトなら、
    前段にvarnishやnginxを置いてリバースプロキシキャッシュでも使えば?
    208 : nobodyさん - 2015/01/19(月) 00:27:11.87 ID:???.net (+14,+10,-1)
    >>204
    そもそもPHPで作るのが間違い
    210 : nobodyさん - 2015/01/19(月) 19:25:44.90 ID:???.net (-13,+1,+0)
    >>209
    cake関係ないじゃん
    211 : nobodyさん - 2015/01/19(月) 19:59:44.14 ID:oaFQh/MS.net (-13,+20,-4)
    >>210
    どうやって判定すれば良いのでしょうか?
    213 : nobodyさん - 2015/01/19(月) 21:40:22.05 ID:oaFQh/MS.net (-19,+20,+1)
    >>212
    はい、教えてください。
    214 : nobodyさん - 2015/01/19(月) 23:55:25.95 ID:???.net (-23,-30,-46)
    じゃあカスタムバリデーションルール作って
    public $validate = array(
     'myDatetimeCheck' => array(
      'rule' => '^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$',
     )
    );
    みたいにすればいいのでは
    このパターンはケタ数しかチェックしてないから日付には使えないけど
    215 : nobodyさん - 2015/01/20(火) 00:39:05.11 ID:MQEJ/fBy.net (+12,+23,-13)
    >>214
    サンクス


    正規表現が苦手なんだよね
    216 : nobodyさん - 2015/01/20(火) 00:56:53.90 ID:???.net (-25,-29,-80)
    >>215
    俺も得意ではないけど頭の体操がてらやってみては

    ただ実際には4/31は?とか閏年じゃ無い年の02/29は?とか言う問題が出てくるから
    正規表現でもできるとは思うけど
    cakePHPのVaridation::dateと二段構えにするとか
    カスタムバリデーションでphpのcheckdateを通すとか工夫は必要になるかも
    217 : nobodyさん - 2015/01/20(火) 13:50:15.77 ID:???.net (-27,-30,-301)
    お、ひさしぶりにおもしろそうな質問発見!
    Validation.php見ればわかるけど日付のチェックは閏年を考慮した正規表現一発でやってるよ
    適当に改造してみるとこんな感じ

    $separator = '(/)';
    $regex['ymd'] = '%^(?:(?:(?:(?:(?:1[6-9]|[2-9]\\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))' .
    $separator . '(?:02\\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\\d)\\d{2})' .
    $separator . '(?:(?:(?:0[13578]|1[02])\\2(?:31))|(?:(?:0[1,3-9]|1[0-2])\\2(29|30))|(?:(?:0[1-9])|(?:1[0-2]))\\2(?:0[1-9]|1\\d|2[0-8]))))$%';

    改造ポイント
    ・セパレータは/しか認めない
    ・西暦2桁表記をNGに変更
    ・月の1桁表記をNGに変更
    ・日の1桁表記をNGに変更

    書いといてなんだけど、理解できないようなら素直に文字列分解して
    4年は~100年は~400年は~のロジック入れればいいよ
    219 : nobodyさん - 2015/01/20(火) 22:23:48.18 ID:???.net (+32,+29,-98)
    アクションの数が増えたっていう話なら
    機能ないし利用するモデルごとに分ける
    プリフィックスルーティングでも使えばいい

    メソッド一つ一つが長くなっているなら
    コンポーネントやモデルや独自のサービスクラスに処理を移すことを考える
    220 : nobodyさん - 2015/01/20(火) 22:51:22.09 ID:uK/q/RsU.net (-15,+29,-61)
    >アクションの数が増えたっていう話なら
    >機能ないし利用するモデルごとに分ける
    >プリフィックスルーティングでも使えばいい
    こっちの事象です。

    プリフィックスルーティングとか初めて聞きました。
    こちらを探して試してみます。
    221 : nobodyさん - 2015/01/25(日) 13:55:32.77 ID:???.net (+32,+29,-127)
    eclipseが重いところにルーティングいじっても何も解決しないと思うのは俺だけ?
    URLが変わってもいいなら、普通にコントローラ分割すればいいし、
    URL変えるわけにはいかないなら、"修正中だけ"別コントローラで作って
    完成したら1つに戻せばいい
    大きなライブラリを使ってるならeclipseから見えない場所に移動させるとか
    コーディング以外にも工夫のしようはあるだろう
    222 : nobodyさん - 2015/01/25(日) 18:50:35.80 ID:???.net (+32,+29,-129)
    プリフィックスルーティングの話は
    複数のコントローラに分割した上でhttp://example.com/admin/から始まるURLを使いたかったらってこと
    AdminControllerなんて名前をつけてるのはURLの都合だろうと思ってね

    eclipseが重くなるほど1つのファイルのソースコードが増えてるってのが本当なら
    1つのコントローラに管理画面の全てを詰め込む設計はまずいだろうし
    225 : nobodyさん - 2015/01/26(月) 18:47:51.81 ID:/y+cf3Fd.net (+26,+24,-120)
    cake2.5.8でプロシージャをコールし、out変数を受け取りたいんだけど、
    query使ってバインド変数で受け取れますか?

    Oracleでやったことのある方がいたら教えていただきたく……
    Oracle以外でも、ヒントになるやもしれませんので、教えてくださったら助かります

    なんでOracleなのにcakeにしてしまったのか……
    226 : nobodyさん - 2015/01/26(月) 20:09:16.40 ID:OoDGdBhC.net (+20,+29,-6)
    >>224
    サンクス

    結局プレーンなPHPを使ってアップローダを作る事にしました。
    228 : nobodyさん - 2015/01/29(木) 20:58:50.89 ID:???.net (-24,-30,+0)
    2.xでSQLServerで使用している方いますか?

    NULL許可、デフォルトNULLと設定したカラムでデータを省略してinsertした際の
    挙動で困っております(当方2.6.1)。

    CREATE TABLE [dbo].[items] (
    [id] int NOT NULL IDENTITY(1,1) ,
    [name] nvarchar(200) NOT NULL DEFAULT (N'') ,
    [type1] int NOT DEFAULT ((0)) ,
    [type2] int NULL DEFAULT NULL ,
    PRIMARY KEY ([id])
    )

    こんな感じのテーブルがあったとして、
    $data['Item']['name'] = 'test';
    $this->create();
    $this->save($data);
    とした場合、MySQLだとtype1,type2ともにDBに設定したデフォルト値でInsertが行われます。
    SQLServerの場合、「Conversion failed when converting the varchar value 'NULL' to data type int.」
    という理由でエラーとなります。
    発行されるSQL文で、SQLServerの場合はNULLをシングルコーテーションで囲む必要が無いのに
    囲んでしまっているというのが原因のように見えますが、これを回避する方法はありますでしょうか?
    230 : nobodyさん - 2015/02/02(月) 22:50:58.85 ID:???.net (+0,+13,-1)
    >>229
    そういうのは出来ない。view側で分岐すべし
    233 : nobodyさん - 2015/02/04(水) 22:31:45.65 ID:HkYqZDdt.net (+30,+29,-66)
    現在、cakePHPで入力内容を保存する際にどうすれば良いか悩んでいます。
    普通の文字は問題無いのですが

    「"」や「>」はサニタイズしてDBに保存するのか
    それとも、エスケープしてDBに保存するのか


    どちらが一般的なのでしょうか?
    234 : nobodyさん - 2015/02/04(水) 23:47:57.07 ID:???.net (-2,-6,-47)
    >>233
    HTMLエスケープのことを言ってるなら
    HTML出力時にエスケープするのが定石
    DB保存時にHTMLエスケープしたりはしない
    235 : nobodyさん - 2015/02/04(水) 23:58:09.18 ID:???.net (+35,+29,-215)
    入力内容をHTMLタグを含まないテキストとして出力する場合はそのまま保存して出力時にエスケープするべき
    入力時のチェック・処理だけだとその後の処理によってスクリプトの文字列が生成される可能性があるので根本的な対策にならない
    入力値サニタイジング後の値を逆手に取るセカンドオーダー攻撃なんてものもある

    HTMLタグを許可する場合に根本的な対策をするには構文解析して必要な要素を抜き出す必要がある

    http://www.ipa.go.jp/security/vuln/websecurity.html
    ここにIPAが出してる安全なウェブサイトの作り方というPDF資料がある
    クロスサイトスクリプティングの項目が参考になる
    236 : nobodyさん - 2015/02/05(木) 00:01:18.00 ID:???.net (+35,+29,-171)
    cakeの作法通りにコーディングしているなら、
    そういった処理は特に意識しなくても勝手にやってくれる
    嘘だと思うなら、ブログチュートリアルの記事追加で
    君の思いつく限りの変な文字を入力して保存、表示をしてみるといい
    どんな入力をしようと問題なく動作するはず

    自動でやってくれないのは
    ・DBがEUC-JPなのに入力に①を使うとかの特殊なケース
    ・SQLを文字列で直接書いている
    ・ヘルパーを使わずに変数を出力
    こういったときは自分でサニタイズ、エスケープ等が必要になる
    237 : nobodyさん - 2015/02/05(木) 00:10:53.62 ID:kXXlZufE.net (+33,+29,-63)
    >>234 >>235 >>236
    皆さん詳しくどうもありがとうございます。

    入力 > 確認 > 登録 or 戻る

    の処理の一連の流を作っているのですがユーザが 「"」を入力した場合に
    文字列が途中で端折られる為に、どうしようか悩んでいました。
    239 : nobodyさん - 2015/02/05(木) 00:13:20.68 ID:???.net (+28,+29,-156)
    あー、229の内容はちょっと興味があったんだけどもう解決してるのか・・・
    $thisを使うためにコンストラクタで$validate定義したら一応うまくいったとだけ言っておく

    てきとーに回答のなかったものにも答えておく

    >>225
    記事内容はMySQLだけど参考になると思う
    http://blog.xole.net/article.php?id=711

    >>227
    正解も間違いもないような話題はリアルのチームメンバーと話し合ったほうがいいと思うよ

    >>228
    SQLServerは環境がないから試せないけどDBのデフォルト値を設定したくなければ
    create()の代わりにclear()を使うといいかも
    バージョンが古くてメソッドがない場合はcreate(false)で
    241 : nobodyさん - 2015/02/05(木) 01:06:39.73 ID:???.net (-27,-30,-44)
    サニタイズとかいう単語フワフワしすぎてるからもう使うのやめたらいいのになってよく思う

    h()の実体はhtmlspecialchars()
    http://php.net/manual/ja/function.htmlspecialchars.php
    http://github.com/cakephp/cakephp/blob/master/lib/Cake/basics.php#L202-L234

    Sanitize:クラスはCookbookに説明あり
    http://book.cakephp.org/2.0/ja/core-utility-libraries/sanitize.html#Sanitize::clean
    242 : nobodyさん - 2015/02/05(木) 01:12:45.87 ID:???.net (-27,-30,-211)
    ていうか迷うとしたらh()とSanitize::html()だと思うのだけれど
    Sanitize::clean()は全く用途が違うメソッドでしょう

    http://book.cakephp.org/2.0/ja/core-utility-libraries/sanitize.html#Sanitize::html

    >このメソッドは、ユーザが送信したデータをHTMLの中に表示する準備をします。
    >これは、ユーザがレイアウトを壊したり画像やスクリプトを挿入することを防ぐ上で特に便利な機能です。
    >もし「$remove」オプションを true にセットした場合、データに含まれるHTMLのタグ等は全て削除されます。
    >false にセットした場合は HTML エンティティとして表示されます。:
    >文字をエスケープすることはエラーの可能性が低く、知られていない新しいタイプの攻撃に対して強いので、文字を取り除くよりもよい方法です。
    243 : nobodyさん - 2015/02/05(木) 01:26:53.54 ID:???.net (-27,-30,-63)
    というか、みんなViewでの出力時は<?php echo h($data); ?> みたいにしてるの?
    echoするときにh()も書くなら、いっその事、DBに保存する前にサニタイズした方が良いと思うんだが。
    beforeSave()で一括サニタイズできるし。それにエスケープさせたくない場合は復元すればいいだけだし。
    244 : nobodyさん - 2015/02/05(木) 01:30:01.34 ID:???.net (+20,+29,-15)
    また馬鹿が増えた……
    245 : nobodyさん - 2015/02/05(木) 01:34:06.94 ID:???.net (+22,+29,-1)
    サニタイズ脳の恐怖
    246 : nobodyさん - 2015/02/05(木) 01:34:15.37 ID:???.net (+25,+29,-20)
    ”また”って事は最低二人の馬鹿がいるわけだな
    247 : nobodyさん - 2015/02/05(木) 01:54:17.98 ID:???.net (+16,+23,+2)
    {{ data }}
    248 : nobodyさん - 2015/02/05(木) 10:48:48.93 ID:???.net (+29,+30,-102)
    エスケープは必要なときにかけるのが基本だぞ
    DBのデータをCSV出力したいとき、逆変換するのか
    DBに入れないデータを表示するときは、表示のときにエスケープするのか

    デートの前、家から出るときにコンドームしてるようなもんだぞ
    途中でトイレいくときどうするんだ
    やる前にまたゴムするのか、2重になっちゃうぞ
    ってこと
    250 : nobodyさん - 2015/02/05(木) 17:00:36.25 ID:???.net (+21,+28,-13)
    2重コンドームワロタw
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について