MW211 EXIT

devlog
Windows/管理者権限実行時のパスに注意
2013年10月07日
バッチファイルを実行する場合、管理者権限がないとアクセスが拒否される場合がある。

これを解決するためには、右クリックメニューから
「管理者として実行」を選べばよい。

但し、これを行った場合、通常通り実行した時と違う挙動がある。

実行バッチのパスに半角括弧「()」が混じっていると正しく動作しないのだ。
#通常通りの実行であれば問題ない

対処方法としては、実行バッチを半角括弧が混じらない位置に移動して実行する
といったところか。
分類:Windows
文字コード/シフトJISをUTF-8に見立てた場合・続き
2013年10月04日
シフトJIS「0x??C?」~「0x??F?」はUTF-8的にはエラーとなると書いたが
これは文字列の最後にこれが来る場合に限られる。

例えば、以下の場合
  陸(0x97A4)…○
  上(0x8FE3)…×
「陸上」は「上」が最後に来るのでエラー。
でも「上陸」は「上」が最後に来ないのでエラーとはならない。

単純に「上」という字がヤバいと錯覚すると、「上陸」がOKなのが想定外となり
混乱するので注意。
分類:文字コード
文字コード/シフトJISをUTF-8に見立てた場合
2013年10月03日
UTF-8では、バイト毎に、先頭4ビットに、以下のような意味を持たせている

「0???」→1バイト文字
「10??」→2バイト文字以上の2バイト目以降
「110?」→2バイト文字の1バイト目
「1110」→3バイト文字の1バイト目
「1111」→4バイト文字の1バイト目

よって、シフトJISの2バイト文字で、「11??」が2バイト目の前半にはまると、
それはUTF-8的にはエラーとなる(後続にバイトが続かないから)。
#但し、「10??」が1バイト目の前半にはまっても大目に見てくれるようだ

つまり、シフトJIS「0x??C?」~「0x??F?」はUTF-8的にはエラーとなる。
分類:文字コード
PHP/DateTimeインスタンスのコピー
2013年10月01日
┌──────────────────────────────────────┐
│$newDateTime = new DateTime();                                              │
│$newDateTime2 = $newDateTime;                                               │
│$newDateTime2->modify('+1 minutes');                                        │
└──────────────────────────────────────┘
上記のように、DateTimeクラスのインスタンスをコピーして
コピー先を更新すると、コピー元も更新される。
(つまり「$newDateTime」の方も1分進んでしまう)

ちょうど、アドレス渡しで更新した時のような感じだ。

では、値渡しのような別物をコピーするには?
┌──────────────────────────────────────┐
│$newDateTime2 = new DateTime($newDateTime->format('Y-m-d H:i:s'));          │
└──────────────────────────────────────┘
とか?(試していないので実際に動作するかはわからない)

いやいや、もっと簡単な方法がある。「clone」だ。
こんな感じ。
┌──────────────────────────────────────┐
│$newDateTime = new DateTime();                                              │
│$newDateTime2 = clone $newDateTime;                                         │
│$newDateTime2->modify('+1 minutes');                                        │
└──────────────────────────────────────┘
これだと「$newDateTime」の方には影響がない。
分類:PHP
PHP/改行コード除去
2013年09月30日
改行コードを除去するには以下のようにやるのが主流らしい。
┌──────────────────────────────────────┐
│$文字列 = str_replace(array("\r\n","\r","\n"), '', $文字列);                │
└──────────────────────────────────────┘
CR、LF、CRLFいずれもいっぺんに除去できる。
分類:PHP
設計/日時の切り上げ
2013年09月29日
日時を切り上げる場合には注意が必要だ。

例えば、10秒単位に切り上げる場合(例えば、12秒は20秒に切り上げられる)、
51秒は60秒に切り上げられるのだが、時刻関数が0~59秒までしか許容していない場合、
エラーとなってしまう。
例)PHPのDateTimeクラスのコンストラクタなど

だからといって、「+1分と0秒」とかで安易に対応してはいけない。
今度は「59分51秒」の場合、「60分00秒」で0~59分しか許容していない場合、
こちらでエラーとなってしまうからだ。

切り捨てはたいてい問題はない。0秒を下回ることはないからだ。

ということで、切り捨てて、一単位分加算するという回避方法が考えられる。
例えば、こんな感じ(PHPのDateTimeクラスの例)。
┌──────────────────────────────────────┐
│if ($newDateTime->format('i') % $ブロック単位) {                            │
│    $ss = floor($newDateTime->format('s') / $ブロック単位) * $ブロック単位; │
│    $newDateTime->modify(sprintf('%04d-%02d-%02d %02d:%02d:00',             │
│                                 $newDateTime->format('Y'),                 │
│                                 $newDateTime->format('m'),                 │
│                                 $newDateTime->format('d'),                 │
│                                 $newDateTime->format('H'),                 │
│                                 $newDateTime->format('i'),                 │
│                                 $ss));                                     │
│    $newDateTime->modify('+' . $ブロック単位 . ' seconds');                 │
│}                                                                           │
└──────────────────────────────────────┘
分類:設計
PostgreSQL/現在操作中のデータベース名
2013年09月28日
現在操作中のデータベース名を取得するSQL。
┌──────────────────────────────────────┐
│SELECT current_database();                                                  │
└──────────────────────────────────────┘
分類:PostgreSQL
Windows/一時ファイル
2013年09月27日
Windows一時ファイル(「C:\Windows\Temp」配下など)は、Windowsアップデートなど
様々な処理を行った時に一時ファイルが作成される場所である。

一時ファイルなので、処理後削除されるものなのだが
削除が漏れている場合には、一時ファイルが残ってしまう場合がある。

Windows一時ファイルは定期的に自動で削除されるものではないので
削除処理を行わなければならない。
たいていの場合は、大勢に影響のないサイズなので放っておいてよいが
ディスクサイズを整理したい場合は削除がおすすめとなる。

削除方法としては、直接そのフォルダ配下から削除する方法がある。

また、「ディスククリーンアップ」でも削除できる。
その方法は、スタートメニューより以下の要領で「ディスククリーンアップ」を選択し、
「削除するファイル」で「一時ファイル」を選んで実行(OK)すればよい
┌───────────────┐┌──────────────┐
│スタートメニュー              ││ディスククリーンアップ      │
│└アクセサリ                  │├──────────────┤
│  └システムツール            ││┌───────────┐  │
│    └ディスククリーンアップ  │││ディスククリーンアップ│  │
└───────────────┘││                      └┐│
                                  ││削除するファイル        ││
                                  ││┌─────────┐  ││
                                  │││■一時ファイル    │  ││
                                  │└────────────┘│
                                  │            ┌──┐┌──┐│
                                  │            │ OK ││    ││
                                  └──────└──┘└──┘┘
分類:Windows
PHP/tempnam()の不正時
2013年09月26日
「tempnam()」は、一時ファイルを作成したい場合に、
適当なファイル名を作成してくれる便利な関数だ。

以下のように引数を指定すると、そのフルパスを返却してくれる。
┌──────────────────────────────────────┐
│tempnam(ディレクトリパス, ファイルの接頭辞);                                │
└──────────────────────────────────────┘

ところで、ディレクトリパスが存在しないものだった場合は?

この場合、Windows一時ファイル(「C:\Windows\Temp」配下など)のパスで
作成されるようだ。(但し、もちろんWindows環境での話)

ぶっちゃけ適当な文字列を指定しても(空文字も含む)、同じようだ。
分類:PHP
PHPダウンロード/readfile()は大きなファイルには使えないⅡ
2013年09月25日
「readfile()」で、大容量のファイルをダウンロードした場合以下のエラーとなる。
┌──────────────────────────────────────┐
│Fatal error:  Allowed memory size of xxxxxxxxx bytes exhausted              │
│                                   (tried to allocate xxxxxxxxx bytes) in …│
└──────────────────────────────────────┘

これを回避するには「while (@ob_end_clean());」で、
出力バッファリングをオフにしてやればいい。
┌──────────────────────────────────────┐
│while (@ob_end_clean());                                                    │
│readfile($大容量ファイル);                                                  │
└──────────────────────────────────────┘
「ob_end_clean()」の前に「@」を付けてエラーメッセージを抑止しているのは、
万一既に出力バッファリングがオフだとエラーとなってしまうため。
デバッグで「ob_get_level()」でその時点での状況を確認してみればよい。
「1」以上だとオンだ。

ということで、「fread()」とかを使わずにそのまま対応できるようだ。
分類:PHP
前へ 1 … 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 … 156 次へ