2011年9月27日火曜日

PHP正規表現:2つのキーワードに挟まれた文字列の抽出

また正規表現でワタワタしたのでメモ

PHPで2つのキーワードに挟まれた任意の文字列を抽出する方法

preg_match('|キーワド1(.+?)キーワド2|su',$source,$match);

preg_match([検索するパターン],[検索する文字列],[結果を格納する配列])

(.+?) .が改行以外の任意の文字、+がその文字が1回以上繰り返し、?はいまいちよくわからないけど入れたら動いたという。ほんと良くわからないまま使っていいのだろうかとは思う。

su sはシングルラインモードといって複数行の文字列でも改行無視して検索するものらしいけど2行にまたがっているキーワードは認識されませんでした。良くわかりません。uはマルチバイト文字用

良くわからんまま動くから使っているけど、良くわからんままだと予想外の動きをするかもしれないわけで、目視で点検できる用途ならいいのですけどそうじゃないと迂闊に使えませんね。正規表現はいつか時間をとってちゃんと勉強したいなと思います。

2011年9月24日土曜日

Xserverでcronを使うときのメモ

Xserverでcronを使うときに調べたことメモ

Xserverでcronを使うときはサーバーパネルの「cronの設定」から設定できます。実行ファイルはコマンドの項に入力します。PHPの場合をはバージョン5.33を使っていると、

/usr/bin/php5.3 /home/waddle/<ドメイン名>/public_html/<phpスクリプト>

のように記述します。対象のスクリプトのアクセス設定を755にしておけばこれで動きます。

スクリプトでmb_send_mailなど、日本語を扱っている場合はスクリプト内で次のように文字エンコードを設定しておくと文字化けしません。
// カレントの言語を日本語に設定する
mb_language("ja");
// 内部文字エンコードを設定する
mb_internal_encoding("UTF-8");

2011年9月22日木曜日

Xserverでmb_send_mailをつかうとき

Xserverでphp動かしてるのですが、mb_send_mailでメールを送ろうと思ってちょっとつまったのでメモ。

まずXserverはSMTPポートを、標準の25番ポートではなく、587番へ設定しないとメールが送信できない仕様のよう。(参考http://www.xserver.ne.jp/man_mail_op25b.php

なのに、PHPのバージョンによってはphp.iniの初期設定がsmtp_port = 25になっています。PHP5.3.3の場合はそうでした。(他のバージョンでは確認していません)

なのでここだけ書き換えてやればちゃんと動きます。

あと、phpをUTF-8で書いているとmb_send_mailで文字化けするのですが、これはXserverのデフォルトの文字コードがEUC-jpのためなので、これもphp.iniのmbstring.internal_encodingの値を直してあげればOK。

Xserverはサーバーによって設定の仕方なども違うようですがうちのsv350番代はこれでうまくいきました。