MW211 EXIT

devlog
PHP/浮動小数点数を経由しないで
2013年11月05日
浮動小数点数を経由しないで整数を1/100する関数。
┌──────────────────────────────────────┐
│private function waru($in) {                                                │
│    $in = preg_replace('/\..*$/', '', $in);                                 │
│    if (preg_match('/^\-/', $in)) {                                         │
│        $in = substr($in, 1);                                               │
│        $in = '0000' . $in;                                                 │
│        return sprintf('-%d.%02d', substr($in, 0, -2),                      │
│                                   substr($in, -2));                        │
│    } else {                                                                │
│        $in = '0000' . $in;                                                 │
│        return sprintf('%d.%02d', substr($in, 0, -2),                       │
│                                  substr($in, -2));                         │
│    }                                                                       │
│}                                                                           │
└──────────────────────────────────────┘

浮動小数点数を経由しないで小数を100倍する関数。
┌──────────────────────────────────────┐
│private function kakeru($in) {                                              │
│    return intval(str_replace('.',                                          │
│                              '',                                           │
│                              preg_replace('/(?<=\..{2}).*$/',              │
│                                           '',                              │
│                                           $in)));                          │
│}                                                                           │
└──────────────────────────────────────┘

いずれも文字列で処理している。
分類:PHP
正規表現/先頭のみ末尾のみ
2013年11月04日
「abba」という文字列で先頭の「b」もしくは、末尾の「b」のみを検索する正規表現。
┌────┬─────────────────────────────────┐
│先頭のみ│(?<=^[^b]*)b                                                      │
├────┼─────────────────────────────────┤
│末尾のみ│b(?=[^b]*$)                                                       │
└────┴─────────────────────────────────┘

ちなみに逆にそれらを除いた場合。
┌────┬─────────────────────────────────┐
│先頭以外│(?<!^[^b]*)b                                                      │
├────┼─────────────────────────────────┤
│末尾以外│b(?![^b]*$)                                                       │
└────┴─────────────────────────────────┘

ついでに応用で、一つしかない場合のみヒットさせるのはこれ。
┌────┬─────────────────────────────────┐
│唯一    │(?<=^[^b]*)b(?=[^b]*$)                                            │
└────┴─────────────────────────────────┘

【注意】
  preg系では「(?<=.*)」のような可変のものは認められないので
  エラーとなる模様。
分類:正規表現
PHP/浮動小数点型とフォーマット指定子
2013年11月03日
「sprintf('%.f')」で浮動小数点型を表示する場合、
こまかく表示しすぎると誤差がでてしまう。
┌──────────────────────────────────────┐
│sprintf('%.17f', 0.7);                                 →0.69999999999999996│
└──────────────────────────────────────┘

でも、端数を四捨五入してくれるらしいので、
ある程度まで粒度を下げると、正しい値になってくれる。
┌──────────────────────────────────────┐
│sprintf('%.16f', 0.7);                                 →0.7000000000000000 │
└──────────────────────────────────────┘
こいつが、端数切捨てで「0.699…」だったら大変だ。

ちょっと気になったのでついでに。
┌──────────────────────────────────────┐
│sprintf('%.f'  , 0.7);                                 →0.700000           │
└──────────────────────────────────────┘

なお、ちなみに「%.F」(こちらはfloat型、「%.f」はdouble型)も同じ結果。
分類:PHP
PHP/iniファイルの記述ミス
2013年11月02日
┌─────────────────────────────────[xxxx.ini]┐
│[WEB]                                                                       │
│ROOT=/root                                                                  │
└──────────────────────────────────────┘
上記のようなiniファイルを定数化してしまうプログラム。
┌──────────────────────────────────────┐
│foreach (parse_ini_file('xxxx.ini', TRUE) as $key1 => $value1) {            │
│    foreach ($value1 as $key2 => $value2) {                                 │
│        define($key2, $value2);                                             │
│    }                                                                       │
│}                                                                           │
└──────────────────────────────────────┘

以下のようにコメントアウトするつもりが…。
┌─────────────────────────────────[xxxx.ini]┐
│;ROOT=/root                                                                 │
└──────────────────────────────────────┘

入力ミスで以下のようにコメントアウトしてしまった。
┌─────────────────────────────────[xxxx.ini]┐
│::ROOT=/root                                                                │
└──────────────────────────────────────┘

そしたら、以下のようなエラーとなってしまった。
┌──────────────────────────────────────┐
│Warning: Class constants cannot be defined or redefined in …               │
└──────────────────────────────────────┘

「["::ROOT"]」を定数名にしようとしてしまったんだから当然だ。

ま、iniファイルだからそんなに堅牢にする必要はないのだけど…。
分類:PHP
DB/権限(authority)と特権(privilege)
2013年10月31日
「特権」は個々の操作権のこと。
「権限」はそれらをグループ化したもの。

「管理者」区分は、「管理者権限」で管理されることになる。

「管理者権限」を持てば、管理者の「特権」を全て使えるということになる、
分類:設計
DOSコマンド/共有フォルダへのコピー
2013年10月29日
ネットワーク上の他の共有フォルダにコピーする例。
┌───────────────────────────────────┬──┐
│net use \\192.168.x.x\フォルダ パスワード /user:ユーザ名              │接続│
├───────────────────────────────────┼──┤
│copy C:\ファイル.txt \\192.168.x.x\フォルダ                           │複写│
├───────────────────────────────────┼──┤
│net use \\192.168.x.x\フォルダ /delete                                │切断│
└───────────────────────────────────┴──┘
分類:Windows
HTML/特殊半角空白のコピペ
2013年10月28日
「&nbsp;」は文字コード「0xC2A0」の半角空白で、
「&ensp;」は文字コード「0xE28082」の半角空白でそれぞれ表示される。

よって、これをコピペしても、一般的な半角空白「0x20」とは違うことになる。

コピペで指定されたものをPHP的に変換するには、以下のような方法がある。
┌──────────────────────────────────────┐
│$■ = preg_replace('/\xC2\xA0/'    , ' ', $■);  // &nbsp;を半角空白にする  │
│$■ = preg_replace('/\xE2\x80\x82/', ' ', $■);  // &ensp;を半角空白にする  │
└──────────────────────────────────────┘

でも、なかなかこの「0xC2A0」と「0xE28082」にはお目にかかれないような気がする。

たいていは「0x20」に変換されて表示されているようだ。

例えばSmartyで以下のように変換して表示したとしても…
┌──────────────────────────────────────┐
│{■|replace:' ':'&ensp;'}                                                   │
└──────────────────────────────────────┘
「あ1- 1」だと「0xE28082」(&ensp;)となるが、
「あ 1-1」だと「0x20」(半角空白)となって表示されるようだ。

また、「0xC2A0」(&nbsp;)に至っては、見たことがない。

本来「&nbsp;」は「0xA0」なのだが、UTF-8的には「0xC2A0」となるものらしい。
ただ、「0xA0」も「0xC2A0」も表示されているのをみたことがないので
真偽がわからない。
分類:HTML
Windows/シャットダウンコマンド
2013年10月27日
「shutdown.exe」についてまとめた。
┌────────────┬─────────────────────────┐
│shutdown.exe            │ヘルプ                                            │
│shutdown.exe /?         │                                                  │
├────────────┼─────────────────────────┤
│shutdown.exe /s         │終了                                              │
│shutdown.exe /s /t 30 /f│(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /r         │再起動                                            │
│shutdown.exe /r /t 30 /f│(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /t 0       │猶予時間なし・非強制                              │
├────────────┼─────────────────────────┤
│shutdown.exe /t 0 /f    │猶予時間なし・強制                                │
├────────────┼─────────────────────────┤
│(なし)                  │猶予時間あり・非強制                              │
├────────────┼─────────────────────────┤
│shutdown.exe /t 秒      │猶予時間あり・強制                                │
│shutdown.exe /t 秒 /f   │(既定)                                            │
├────────────┼─────────────────────────┤
│shutdown.exe /f         │強制                                              │
└────────────┴─────────────────────────┘
分類:Windows
IE/画面サイズの設定
2013年10月26日
IEで画像を採取しようとした場合、手動でサイズを調整すると
微妙に統一がとれなかったりする。

これを解消するため、IEの画面サイズを値で指定する方法を調べた。

「F12」を押して、「開発者ツール」を起動する。
メニューから「ツール」→「サイズ変更」を選択すると
以下の選択肢が出てくるので、任意のものを選ぶ。
  ・「 800× 600」
  ・「1024× 768」
  ・「1280× 768」
  ・「1280×1024」
  ・「 480× 800」
  ・「 800× 480」

「カスタム」という選択肢を選べば、自由にサイズを登録できる。
分類:ブラウザ
PHP/formの飛び先パスについての注意
2013年10月25日
formタグのactionパラメータに、飛び先のURLを指定する場合、
それがファイルではなく、ディレクトリであった場合には
しっかり末尾に「/」をつけてあげなければならない。
┌─┬────────────────────────────────────┐
│×│<form method="post" action="/abc">                                      │
├─┼────────────────────────────────────┤
│○│<form method="post" action="/abc/">                                     │
└─┴────────────────────────────────────┘

さもないと、「301転送」が発生してしまう。
┌─┬────────────────┬───────────────────┐
│×│… "POST /abc HTTP/1.1" 301 …  │301 Moved Permanently(転送)           │
├─┼────────────────┼───────────────────┤
│○│… "POST /abc/ HTTP/1.1" 200 … │200 OK(正常)                          │
└─┴────────────────┴───────────────────┘
(といっても、そうならないパスがあったりするから厄介だ)

「301転送」が起きるとどうなるのか?POSTの中身が消えてしまう(引き継がれない)

つまり、formタグの「/」がないだけで、いくらsubmitしても
受信側で$_POSTでデータを拾えないという怪奇現象が発生してしまうのだ。
(といっても、そうならないパスがあったりするから、ますます怪奇現象だ)
【後日追記あり】
分類:PHP、Apache
前へ 1 … 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 … 156 次へ