MW211 EXIT

devlog
画面をリフレッシュする方法
2012年04月26日
いろいろある。

【1】メタタグを使う方法
┌──────────────────────────────────────┐
│<meta http-equiv="Refresh" content="秒"/>                                   │
└──────────────────────────────────────┘

【2】JavaScriptを使う方法
┌──────────────────────────────────────┐
│<script type="text/javascript">                                             │
│  window.onload = function() {                                              │
│    setTimeout("location.reload()", ミリ秒);                                │
│  }                                                                         │
│</script>                                                                   │
└──────────────────────────────────────┘
分類:JavaScript、HTML
IEのバグ
2012年04月25日
IE8で、文字サイズを「最大」にしてから「中」に戻すと、
ファイルアップロード用のボタン名が大きいまま元に戻らない。
#普通のボタンでは起こらない、ファイルアップロード用ボタンのみの問題

IE9ではなおっている
分類:ブラウザ
ブラウザ/戻るボタンの挙動
2012年04月23日
┌──────────────────────────────────────┐
│<meta http-equiv="Pragma"        content="no-cache"/>                       │
│<meta http-equiv="Cache-Control" content="no-cache"/>                       │
│<meta http-equiv="Expires"       content="0"/>                              │
└──────────────────────────────────────┘
上記をHTMLヘッダ部(メタ部)に記述すると、ブラウザの戻るボタンで
一度表示済みの画面へ戻っても再読込してくれて最新の情報を取得してくれる。
#ま、逆にいえば、キャッシュを読んだ方が速いって話でもあるんだけど

ただし、Safariではこれは効かないようだ。
#ついでにIEでは、容量が小さい(32KB未満)と効かないようだ(効かなかった?)

さてそれはさておき、Chromeではこれらと趣が一風異なる。

なんと別途、入力欄に入力中の文字列を記憶しており、
再読込してくれて最新の情報を取得してくれた挙げ句、
以前に入力していた内容を上書してくれるのだ。

しかも、厄介なのは、name属性が配列で添字がない(例:name="id[]")と、
前詰めで復元されてしまうのだ。
つまり、三行目当たりに入力していたのに、戻ったら一行目に移動してたりするのだ。
しかも、元々一行目に値があったら上書きされてしまっているのだ。

まとめるとこんな感じ。
┌────────┬─────────┬─────────┐
│                │ 最新の情報を取得 │入力中だった内容を│
├────────┼─────────┼─────────┤
│InternetExplorer│       する       │    クリアする    │
├────────┼─────────┼─────────┤
│Firefox         │       する       │    クリアする    │
├────────┼─────────┼─────────┤
│Chrome          │       する       │     復元する     │
├────────┼─────────┼─────────┤
│Safari          │      しない      │   クリアしない   │
└────────┴─────────┴─────────┘
分類:ブラウザ
PHP/サニタイズ漏れ検出方法
2012年04月22日
簡単にサニタイズ(XSS対策)漏れを検出する方法。

以下の文字列を手当たり次第、各項目に登録して表示させる。
┌──────────────────────────────────────┐
│<script>alert("@");</script>                                                │
└──────────────────────────────────────┘

アラートダイアログが表示されたら負け(サニタイズ漏れ)だ。
分類:PHP
PHP/特殊文字の変遷
2012年04月21日
今さらながら…、サニタイズして表示した特殊文字って、POSTした場合どうなるの?

「'」は「&#039;」にエスケープされる訳だが、以下のように設定してPOSTしてみた。
┌──────────────────────────────────────┐
│<input type="hidden" name="test" value="&#039;"/>                           │
└──────────────────────────────────────┘
結果は以下の通り、「'」に戻ってる。
┌──────────────────────────────────────┐
│echo $_POST['test'];  →「'」                                               │
└──────────────────────────────────────┘
だから、「'」とか表示させたものをそのまま再入力することができるんですね。

DBから読み出して、画面表示して、POSTして、またDBに戻した場合
例えば「'」は、以下のような変遷を経ることになる。
┌──────────────────────────────────────┐
│┌──┐                                                                    │
││┌───┐                                                                │
│││  '   │…DB上の元の値                            …(1)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…PHP変数として取得される値               …(2)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││&#039;│…画面表示のためにサニタイズされた値      …(3)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…POSTされた値(PHP変数として取得される値) …(4)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  \'  │…SQLインジェクション対策で変換された値   …(5)                 │
││└─┬─┘                                                                │
││    ↓                                                                    │
││┌───┐                                                                │
│││  '   │…再度DB上に格納された値                  …(6)                 │
││└───┘                                                                │
│└──┘                                                                    │
└──────────────────────────────────────┘

【おまけ】
ちなみに、「TRUE」の場合、(1)(2)は「TRUE」、(3)(4)(5)で「1」、(6)で「TRUE」、
「FALSE」の場合、(1)(2)は「FALSE」、(3)(4)で「」、(5)(6)で「FALSE」
ってところか。

「if ($_POST['test'])」ってした場合、「1」で真、「」で偽になるしね。

でも大抵は、チェックボックスとか別の形式になるんだけど。
分類:PHP
PHP/php_curlの使用方法
2012年04月19日
「php.ini」の「extension=php_curl.dll」を有効(先頭の「;」を除去)にして再起動。

【追記】
  「libeay32.dll」と「ssleay32.dll」へのパス設定も必要。
  これらは「php.exe」や「php.ini」があるPHPフォルダにあるので
  Windowsの環境変数で設定してあげればよい。(例「Path=C:\Program Files\PHP」)
分類:PHP
正規表現/文字コードの中身
2012年04月15日
正規表現で頻出の「[\x21-\x7E]」の中身は以下の通り。
┌─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┬─┐
│\│_0│_1│_2│_3│_4│_5│_6│_7│_8│_9│_A│_B│_C│_D│_E│_F│
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│2_│  │! │" │# │$ │% │& │' │( │) │* │+ │, │- │. │/ │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│3_│0 │1 │2 │3 │4 │5 │6 │7 │8 │9 │: │; │< │= │> │? │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│4_│@ │A │B │C │D │E │F │G │H │I │J │K │L │M │N │O │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│5_│P │Q │R │S │T │U │V │W │X │Y │Z │[ │\ │] │^ │_ │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│6_│` │a │b │c │d │e │f │g │h │i │j │k │l │m │n │o │
├─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┼─┤
│7_│p │q │r │s │t │u │v │w │x │y │z │{ │| │} │~ │  │
└─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┴─┘

なので英数字以外の記号といったら、以下を意識するとよいだろう。
「!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~」
分類:正規表現
PHP/設定系エラー(1)
2012年04月14日
┌──────────────────────────────────────┐
│Fatal error: Allowed memory size of xxxx bytes exhausted                    │
│ (tried to allocate xx bytes) in …                                         │
└──────────────────────────────────────┘
【原因】
  PHPプログラム処理で使用するメモリが規定のサイズを超えた。
  →変数(配列)をいっぱい使うなど贅沢なメモリの使い方の処理をしているなど。
【処置】
  ・プログラムを見直して、使用メモリの省力化をはかる
  ・「php.ini」の「memory_limit」の設定を変更する
分類:PHP
PostgreSQL/シーケンス
2012年04月13日
serial型とかの自動でインクリメントしてれるIDがあった場合、
「表」に対して「表のシーケンス」的なものが自動で生成される。

「表のシーケンス」と「表」は同期を合わせなければならないので、
「表」を空っぽにしたら、以下のように「表のシーケンス」も
初期値に戻さなければならない。
┌──────────────────────────────────────┐
│SELECT SETVAL ('表のシーケンス', 1, false);                                 │
└──────────────────────────────────────┘
#第三パラメータに「false」を指定すると、「1」の手前、つまり「0」が設定される

その後、INSER文をそのシーケンス項目以外に実行してあげれば、
シーケンス項目は自動でインクリメントしてくれる。
┌──────────────────────────────────────┐
│INSERT INTO 表 (列) VALUES ('値');                                          │
│INSERT INTO 表 (列) VALUES ('値');                                          │
│INSERT INTO 表 (列) VALUES ('値');                                          │
└──────────────────────────────────────┘
この場合「1,2,3」が割り振られ、
「表のシーケンス」は「3」となり次回は「4」が割り振られる。

しかし、そのシーケンスを任意の値に指定した場合は、
シーケンスはインクリメントされない。
┌──────────────────────────────────────┐
│INSERT INTO 表 (id, 列) VALUES (1, '値');                                   │
│INSERT INTO 表 (id, 列) VALUES (2, '値');                                   │
│INSERT INTO 表 (id, 列) VALUES (3, '値');                                   │
└──────────────────────────────────────┘
「id」がシーケンス項目にあたるとした場合、自動インクリメントされないので
「表のシーケンス」は「0」のままだ。

┌──────────────────────────────────────┐
│INSERT INTO 表 (列) VALUES ('値');                                          │
└──────────────────────────────────────┘
これで「id」が一意キーであったとして、
次に上記のような「id」を指定しないINSERTをしたら
「id」に「1」が設定されるので、二重キーエラーとなってしまう。

ここは「表のシーケンス」を「3」にする必要がある。

それには、こうだ。
┌──────────────────────────────────────┐
│SELECT SETVAL('表のシーケンス', 3, true);                                   │
└──────────────────────────────────────┘

「pgAdmin」で、INSERT文形式でエクスポート(バックアップ)した時に、
何気に付随しているので要注目だ。
分類:PostgreSQL
ファイルパス「/」と「\」の違い
2012年04月11日
┌───────────┐
│ディレクトリ/ファイル │
├───────────┤
│ディレクトリ\ファイル │
└───────────┘
ディレクトリ(フォルダ)の区切りは「/」の場合と「\」の場合がある。

UNIX(LINUX)系は「/」で、Windows系は「\」らしい。

ちなみに「\」は「\」の半角、つまりバックスラッシュだったのだが、
日本語OSの場合、円マークが割り当てられてしまったので、
一見「/」(スラッシュ)と関連性はないようだが、意味するところは以下のような感じで
非常に似ているといえる。
┌───────────┐
│ディレクトリ/ファイル│
├───────────┤
│ディレクトリ\ファイル│
└───────────┘

以下のように覚えればよいか。
┌────┬───────────┐
│UNIX    │ディレクトリ/ファイル │
├────┼───────────┤
│Windows │フォルダ\ファイル     │
└────┴───────────┘
前へ 1 … 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 … 156 次へ