Pages

2016年1月8日金曜日

CakePHP2 & CakePHP3 の alphaNumeric は日本語も通過する

CakePHP2 & CakePHP3 の alphaNumeric が日本語も通過しちゃうので、内容を確認したメモ


ソース

public static function alphaNumeric($check) {
  if (is_array($check)) {
    extract(self::_defaults($check));
  }

  if (empty($check) && $check != '0') {
    return false;
  }
  return self::_check($check, '/^[\p{Ll}\p{Lm}\p{Lo}\p{Lt}\p{Lu}\p{Nd}]+$/Du');
}

パターン

http://php.net/manual/ja/regexp.reference.unicode.php

\p{Ll} | 小文字アルファベット
\p{Lm} | 擬似文字
\p{Lo} | 大文字小文字の区別や修飾文字を持たないその他の文字
\p{Lt} | タイトル文字
\p{Lu} | 大文字アルファベット
\p{Nd} | 多言語における10進数字

パターン修飾子

D (PCRE_DOLLAR_ENDONLY)

この修飾子を設定すると、パターン内のドルメタ文字は、検索対象文字列の 終わりにのみマッチします。
この修飾子を設定しない場合、ドル記号は、 検索対象文字列の最後の文字が改行文字であれば、その直前にもマッチします。
この修飾子は、m を設定している場合に無視されます。
Perl には、この修飾子に等価なものはありません。

u (PCRE_UTF8)

この修正子は、Perl 非互換な PCRE の機能を有効にします。
パターンと対象文字列は、 UTF-8 として処理されます。
この修正子は、UNIX では PHP 4.1.0 以降、Win32 では PHP 4.2.3 以降で 使用可能です。
また、PHP 4.3.5 以降では、パターンの UTF-8 としての妥当性も確認されます。
な対象文字列を preg_* 関数に渡しても、何もマッチしません。
無効なパターンを渡すと、E_WARNING レベルのエラーが発生します。
5オクテットおよび6オクテットの UTF-8 シーケンスは、PHP 5.3.4 以降 (PCRE 7.3 2007-08-28 以降) では無効とみなされます。
以前のバージョンでは、これらも UTF-8 として有効だとみなされていました。

※ 上記説明解りにくい人はこのサイトの説明見たら解るかも?
http://pentan.info/php/reg/use.html

処理内容

つまり上記文字のどれかが1回以上利用された文字だけで構成されたものかをチェックする

2015年11月16日月曜日

◯◯毎に存在する大量のコードからマッチング

◯◯毎に存在する大量のコードにちゃんと含まれてるかフォーム値をチェックしたいけどDBに入れるのはちょっと。。

MYSQLでパーティション切って入れてもパーティション数の上限が気になりすぎる。。。

なんて時はDBに入れずにファイルのまま保存してファイル内検索かな?

grep "12345678" master.txt

これだと部分一致しちゃうので

grep -x "12345678" master.txt

でも何かマッチしない。。。

改行コードが LF じゃない。。

って事で保存時に改行コード変換しとく。

cat ./tmp.txt | tr '\r\n' '\n' | tr '\r' '\n' > ./master.txt

とりあえずこれで様子見てみよう。。
他に低コストで良い方法あれば教えてください。


OSコマンドインジェクション にはご注意ください。

2015年6月11日木曜日

wkhtmltopdf をインストール

$ yum --enablerepo=epel wkhtmltopdf

で入れようとしたけど、 X 入れろみたいなエラーが出るので公式サイトからRPM持ってきて入れる事にした。

$ su -

まずは日本語フォントを追加。

# cd /usr/share/fonts/
# wget http://ipafont.ipa.go.jp/ipaexfont/IPAexfont00201.php
# unzip IPAexfont00201.php
# rm IPAexfont00201.php
# fc-cache -fv
# fc-list

wkhtmltopdf をインストール

# wget http://jaist.dl.sourceforge.net/project/wkhtmltopdf/0.12.2.1/wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm
# yum localinstall wkhtmltox-0.12.2.1_linux-centos7-amd64.rpm

テスト
$ wkhtmltopdf http://yahoo.co.jp yahoo.pdf

2015年3月5日木曜日

PHP fgetcsvを使える環境を構築

fgetcsv にはロケールを指定するパラメータがありません。

そこで fgetcsv を実行する前に

setlocale(LC_ALL, 'ja_JP.SJIS');

を実行する。

が、しかし化ける。。
試しにEUC-JPを指定してみるといけている気がするけど、一部文字で化ける。。
そもそもなんでEUC-JP。。

で、コマンドからサーバーのロケールを確認

$ locale -a | grep JP

ja_JP
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8

SJISが無い。。
CentOS 6 でも 7でも入ってない。。

って事で追加しよう。

$ localedef -f SHIFT_JIS -i ja_JP /usr/lib/locale/ja_JP.SJIS

をrootで実行して追加、そして確認

$ locale -a | grep JP

ja_JP
ja_JP.SJIS
ja_JP.eucjp
ja_JP.ujis
ja_JP.utf8

そしてfgetcsvの確認。

setlocale(LC_ALL, 'ja_JP.SJIS');
fgetcsv(***);

とても良い感じ♪
SJIS無い、入れれないサーバーだと使えないな。。
しばらくこれで様子を見てみます。

2014年12月11日木曜日

Git PULLした時に既にファイルがあった場合

経緯

app/tmp/ を .gitignore の中で指定していて、ある日app/tmp/sample/data1.txt を追加しました。
ずっとプッシュした気になっていたのですが、できておらず。。

そこで他の人が app/tmp/sample/data1.txt が無い事に気づいたプッシュしてくれました。

その後私がPULLするとこんなメッセージが。。

error: Untracked working tree file 'app/tmp/sample/data1.txt' would be overwritten by merge.  Aborting


内容は結局同じなので、app/tmp/sample/data1.txt を削除してからPULLしたら解決と。。

Followers