投稿者「momiman」のアーカイブ

Linodeがホントひどい

自分が構築するサーバは基本的にとして日本国内からのアクセスは許可、国外は不許可。

SSHはもちろんガッツリ絞ってるし鍵認証している。

HTTPはGoogleや他のbotもREJECTされてしまうので国外へも開放してる。

けど、SMTP/POP/IMAPあたりはブラックリストを参照しつつも国内アクセスは許可している。
外出先からメールの送受信が必要になるから。

ここで問題になったのが、東京にデータセンタを置いたLinode。

Linodeが東京にデータセンタを置いて3年くらい経ったのかな?
WHOISから確認出来るけど、IPはKDDIから割当られている。

もうね、本当にひどい。

かなりの勢いで日々不正アクセスのアタックがあり、そのたびにLinodeのAbuseにメールしたけど全くダメ。
一切対応してくれないし、そもそも「調査します」の一言すらない。

だからKDDIのAbuseに連絡したんだけど、それも音沙汰無し。

なので、現状分かっている範囲で以下のLinodeのIPをREJECT。

106.185.24-63.
106.186.112-127.
106.186.16-47.
106.187.88-103.

Linodeはオススメしない。

では。

Subversionでコミット時にメール送信する

Subversionでコミットの際にメールを送信するようにした時の備忘録。

前提として、メール送信には「commit-email-jp-CentOS5.pl」を使う。

上記に関してはググると出てくるので、ダウンロードして

/usr/share/doc/subversion-1.6.11/tools/hook-scripts/

に設置。

Commitした際の処理をhookしてメール送信するので、対象リポジトリのhooksディレクトリの中の以下ファイルをリネーム。

post-commit.tmpl → post-commit

んで、中を見てみると mailer.py を使う用になっているので、以下のように修正

#mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf

export PATH=/usr/share/doc/subversion-1.6.11/tools/hook-scripts/:$PATH
commit-email-jp-CentOS5.pl "$REPOS" "$REV" --from [メールのFROMアドレス] -s '[メールのSUBJECT]' [メールのTOアドレス]

このままでもいいんだけど、どうもメールのDateヘッダがおかしくなるので「commit-email-jp-CentOS5.pl」を修正。

以下をヘッダ部に追加。

use POSIX qw(setlocale LC_ALL);

560行目あたりでDateヘッダの処理をしているので、取りあえずそのあたりをコメント。

#$formatted_date = strftime('%a %b %e %X %Y', localtime()); #これでは日本語文字列が出てきて妙なことになる
#chomp($formatted_date = `date`);
#$formatted_date = strftime('%a, %d %b %Y %X %z' , localtime());
#push(@head, "From $mail_from $formatted_date\n");
#chomp($formatted_date = `date`);
## Dateヘッダはsendmail(sendmane)に任せるので一時コメントアウト。
##
##push(@head, "Date: $formatted_date\n");
#my $ltime = "";
#my $wday = "";
#my $mon = "";
#my $day = "";
#my $time = "";
#my $year = "";
#$ltime = localtime;
#($wday, $mon, $day, $time, $year) = split(/ /, $ltime);
#
#formatted_date = sprintf("%s, %2d %s %s %s +0900", $wday, $day, $mon, $year, $time);

んで、

push(@head, "Date: $formatted_date\n");

の直前で以下を追加。

setlocale( LC_ALL, "C" );
$formatted_date = strftime('%a, %d %b %Y %X %z' , localtime());

これでメールヘッダがちゃんと出力されるようになった。

ソース内の作者さんのコメントに
「これでは日本語文字列が出てきて妙なことになる」
って書いてあるけど、setlocale()やってあげれば大丈夫。

あとは$formatted_dateをRFC822に合うようにフォーマットを直してあげればOK。

DateTimeを使ってメールヘッダ用の日付を出力出来るけど、それまでに色々ライブラリ入れる必要があって、それがかなり面倒。
最初からDateTimeの環境があるなら、それが一番スマートだけど。

では。

phpMyAdminへの不正アクセスについて

なんやかんやで、昔からphpMyAdminへの不正アクセスアタックはあるもので。

以下、どんなリクエストがあるか、リストします。
※DocumentRootが/var/www/htmlの場合です

/var/www/html/MyAdmin
/var/www/html/_phpmyadmin
/var/www/html/admin
/var/www/html/cpanelphpmyadmin
/var/www/html/cpphpmyadmin
/var/www/html/db
/var/www/html/dbadmin
/var/www/html/myadmin
/var/www/html/mysql
/var/www/html/mysqladmin
/var/www/html/php
/var/www/html/php-my-admin
/var/www/html/phpMyAdmin
/var/www/html/phpMyAdmin-2
/var/www/html/phpMyAdmin-2.10.0
/var/www/html/phpMyAdmin-2.10.0.0
/var/www/html/phpMyAdmin-2.10.0.1
/var/www/html/phpMyAdmin-2.10.0.2
/var/www/html/phpMyAdmin-2.10.1.0
/var/www/html/phpMyAdmin-2.10.2.0
/var/www/html/phpMyAdmin-2.11.0.0
/var/www/html/phpMyAdmin-2.11.1-all-languages
/var/www/html/phpMyAdmin-2.11.1.0
/var/www/html/phpMyAdmin-2.11.1.1
/var/www/html/phpMyAdmin-2.11.1.2
/var/www/html/phpMyAdmin-2.6.1-pl2
/var/www/html/phpMyAdmin-2.6.1-pl3
/var/www/html/phpMyAdmin-2.6.4-pl3
/var/www/html/phpMyAdmin-2.6.4-pl4
/var/www/html/phpMyAdmin-2.6.4-rc1
/var/www/html/phpMyAdmin-2.6.5
/var/www/html/phpMyAdmin-2.6.6
/var/www/html/phpMyAdmin-2.6.9
/var/www/html/phpMyAdmin-2.7.0-beta1
/var/www/html/phpMyAdmin-2.7.0-pl1
/var/www/html/phpMyAdmin-2.7.0-pl2
/var/www/html/phpMyAdmin-2.7.0-rc1
/var/www/html/phpMyAdmin-2.7.5
/var/www/html/phpMyAdmin-2.7.6
/var/www/html/phpMyAdmin-2.7.7
/var/www/html/phpMyAdmin-2.8.2
/var/www/html/phpMyAdmin-2.8.2.3
/var/www/html/phpMyAdmin-2.8.3
/var/www/html/phpMyAdmin-2.8.4
/var/www/html/phpMyAdmin-2.8.5
/var/www/html/phpMyAdmin-2.8.6
/var/www/html/phpMyAdmin-2.8.7
/var/www/html/phpMyAdmin-2.8.8
/var/www/html/phpMyAdmin-2.8.9
/var/www/html/phpMyAdmin-2.9.0
/var/www/html/phpMyAdmin-2.9.0-rc1
/var/www/html/phpMyAdmin-2.9.0.1
/var/www/html/phpMyAdmin-2.9.0.2
/var/www/html/phpMyAdmin-2.9.1
/var/www/html/phpMyAdmin-2.9.2
/var/www/html/phpMyAdmin-3.0.0-rc1-english
/var/www/html/phpMyAdmin-3.0.0.0-all-languages
/var/www/html/phpMyAdmin-3.0.1.0
/var/www/html/phpMyAdmin-3.0.1.0-english
/var/www/html/phpMyAdmin-3.0.1.1
/var/www/html/phpMyAdmin-3.1.0.0
/var/www/html/phpMyAdmin-3.1.0.0-english
/var/www/html/phpMyAdmin-3.1.1.0-all-languages
/var/www/html/phpMyAdmin-3.1.2.0
/var/www/html/phpMyAdmin-3.1.2.0-all-languages
/var/www/html/phpMyAdmin-3.1.2.0-english
/var/www/html/phpMyAdmin-3.4.3.1
/var/www/html/phpMyAdmin2
/var/www/html/phpMyAdmin3
/var/www/html/phpadmin
/var/www/html/phpmyadmin
/var/www/html/pma
/var/www/html/scripts
/var/www/html/websql

上記に該当するURLの方は変更した方がよろしいかと。

では。

tcpserver+qmailでの拒否IPリスト

最近はオランダからの不正アクセスが非常に多い。
あとは、以前と同じように中国・台湾・インド・アメリカあたり。

時々フランスとイタリア、ドイツから集中的に。

なんやかんや、かなり追加していたので、載せてみる。
以下、基本的には外国だけど、ちょっと国内もある拒否IPリスト。

1.23.65.194:deny
1.232.111.99:deny
1.53.73.90:deny
1.54.112-127.:deny
101.224-231.:deny
103.12.216.:deny
103.15.214.0-127:deny
103.15.215.128-255.:deny
103.16.160-163.:deny
103.18.76-79.:deny
103.19.161.:deny
103.2.44-47.:deny
103.20.37.:deny
103.20.39.:deny
103.24.192-195.:deny
103.241.168-171.:deny
103.244.104-107.:deny
103.244.92-95.:deny
103.249.212.:deny
103.27.186.:deny
103.30.73.:deny
103.30.74.:deny
103.31.140-143.:deny
103.31.192-195.:deny
103.6.44-47.:deny
103.7.241.:deny
103.9.156-159.:deny
103.9.177.0-127.:deny
104.192.100-103.:deny
104.200.16-31.:deny
104.40.140.149:deny
105.227.180.120:deny
105.236.11.64-127.:deny
105.236.83.128-191:deny
105.237.82.128-191:deny
106.185.24-63.:deny
106.186.112-119.:deny
106.186.120-127.deny
106.186.16-31.:deny
106.187.32-47.:deny
106.187.88-103.:deny
106.66.128-191.:deny
106.67.128-191.:deny
107.161.112-127.:deny
107.161.144-159.:deny
109.123.99.:deny
109.124.190.78:deny
109.191.68.5:deny
109.200.245.35:deny
109.202.8-11.:deny
112.120.64-95.:deny
112.121.128-159.:deny
112.135.238.157:deny
112.137.128-143.:deny
113.160.128-159.:deny
113.165.252.175:deny
113.169.167.218:deny
113.181.79.148:deny
113.53.138.168:deny
113.53.189.22:deny
115.164.:deny
115.67.69.157:deny
115.78-79.deny
116.203.101.6:deny
116.224-239.:deny
116.251.208-215.:deny
116.96-111.:deny
117.18.0.:deny
117.24-31.:deny
117.253.:deny
119.84.:deny
12.236.34.128-159:deny
120.140-141.:deny
120.144-159.:deny
120.56-59.:deny
121.136.204.138:deny
121.160-191.:deny
121.78.:deny
122.113.-63.:deny
122.3.186.144-151:deny
123.136.96-127.:deny
123.18.211.14:deny
124.109.108-111.:deny
124.76-79.:deny
124.8-12.:deny
125.172.189.218:deny
125.25.41.80:deny
125.27.20.241:deny
125.99.:deny
130.193.80.72-79:deny
133.242.246.100-116:deny
137.175.79.192-255:deny
14.160-191.:deny
14.167.36.179:deny
14.212.198.87:deny
14.97.98.120:deny
14.99.22.83:deny
145.129.0-127.:deny
146.255.133.78:deny
147.30.114.39:deny
151.250.:deny
151.47.202.184:deny
151.8.99.192-223:deny
157.54-60.:deny
162.208.48-51.:deny
162.218.90-91:deny
167.160.0-31.:deny
171.101.229.183:deny
174.140.160-175.:deny
175.138.159.143:deny
175.41.40-43.:deny
175.45.168-175.:deny
176.214.232-239.:deny
176.53.28.:deny
176.61.138-139.:deny
177.125.144.49:deny
177.138-139.:deny
177.228.162.226:deny
177.43.184.217-222:deny
177.66.41.30:deny
177.69.:deny
177.72.112-115.:deny
177.91.88-95.:deny
178.120-121.:deny
178.137.31.190:deny
178.19.109.46:deny
178.34.252.38:deny
178.79.128-191.:deny
178.88.168.78:deny
178.88.188-191.:deny
179.190.128-255.:deny
180.152-159.:deny
180.222.32-63.:deny
180.72-75.:deny
181.128-135.:deny
181.188.47.201:deny
182.160.192-255.:deny
182.55.81.254:deny
182.64-79.:deny
183.89.59.240:deny
184.183.176-183.:deny
185.3.132.:deny
185.56.60-63.:deny
186.119.123.66:deny
186.177.0-127.:deny
186.2.22.200:deny
186.215.174.249-254:deny
186.48-51.:deny
186.54.176.225:deny
186.56.128-255.:deny
186.78-79.:deny
187.210.:deny
187.241.196.166:deny
187.84.192-223.:deny
188.131.64-127.:deny
188.40.138.192-255:deny
188.55.192-255.:deny
188.93.20-23.:deny
189.100.213.153:deny
189.111.220.166:deny
190.1.244.243:deny
190.153.0-127.:deny
190.191.60.216:deny
190.22.128-255.:deny
190.66.72.66:deny
190.71.139.178:deny
191.232-235.:deny
192.157.192-255.:deny
192.163.192-255.:deny
192.165.1.:deny
192.198.192-207.:deny
192.3.158.0-127:deny
192.80.170.:deny
193.0.200.:deny
195.19.247.65:deny
195.222.58.:deny
197.0-31.:deny
197.155.112.-127.:deny
197.200.8.233:deny
197.79.27.158:deny
197.87.126.129:deny
198.41.96-127.:deny
198.58.96-127.:deny
199.168.136-143.:deny
2.132.243.40:deny
2.135.66.142:deny
2.138-139.:deny
2.229.113.:deny
2.229.50.16-19:deny
200.171.21.253:deny
200.27.72.:deny
200.80.96-111.:deny
200.89.64-79.:deny
201.144.146.:deny
201.199.94.37:deny
201.205.72-79.:deny
201.243.97.205:deny
201.252.12.deny
201.47.:deny
202.145.5.:deny
202.148.12.:deny
202.152.39.248-255.:deny
202.165.176-191.:deny
202.191.128-255.:deny
203.151.:deny
203.40-47.:deny
208.180.:deny
209.131.192-223.:deny
210.195.64-127.:deny
211.144.64-95.:deny
211.160.:deny
211.235.224-255.:deny
211.53.0-255.:deny
212.174.252.128-143:deny
212.185.111.112-119:deny
212.29.192-255.:deny
212.48.63.174:deny
212.48.64-95.:deny
212.67.215.:deny
212.75.128-135.:deny
213.135.176-191.:deny
213.197.128-191.:deny
213.42.128-129.:deny
216.185.32-63.:deny
216.81.74.107:deny
216.81.77.39:deny
217.12.204.:deny
217.128.225.:deny
217.20.253.:deny
217.23.66.:deny
217.23.67.0-127:deny
217.39.146.160-167:deny
217.91.0-127.:deny
218.21.240.104-111.:deny
218.241.128-255.:deny
219.235.16-31.:deny
220.106.170.103:deny
221.144-168.:deny
223.203.192-195.:deny
223.27.241.96-111:deny
223.30-31.:deny
23.224-23.225.:deny
23.239.0-31.:deny
23.80.198.:deny
23.80.42.:deny
23.82.160-167.:deny
23.92.16-31.:deny
24.97.0-127.:deny
27.32-33.:deny
27.38.:deny
31.194.0-255.:deny
37.14.:deny
37.150.0.209:deny
37.150.253.75:deny
37.159.128-255.:deny
37.212-215.:deny
37.221.166.112-127.:deny
37.254.:deny
41.109.87.188:deny
41.111.53.185:deny
41.21.128-255.:deny
41.222.172.:deny
41.98.150.29:deny
41.98.160.52:deny
42.118.192-207.:deny
46.149.244.114:deny
46.171.143.88-95:deny
46.219.72-79.:deny
46.29.252-255.:deny
46.45.128-191.:deny
5.14.177.81:deny
5.167.136.112:deny
5.18.56.10:deny
5.251.184.112:deny
5.39.216-223.:deny
5.39.223.0-127:deny
5.39.223.:deny
5.55.102.171:deny
5.79.142.73:deny
50.194.34.29:deny
50.74-75.:deny
58.185.184.208-215:deny
58.248-255.:deny
58.56-59.:deny
58.80.99.211-213.:deny
59.93.198.106:deny
60.28-29.:deny
61.135.:deny
61.166.0.:deny
61.50.128-255.:deny
61.91.224-255.:deny
62.193.224-239.:deny
62.244.0-63.:deny
62.251.128-255.:deny
66.100-101.:deny
67.140-141.:deny
68.106.152-159.:deny
69.196.192-223.:deny
69.26.0-31.:deny
69.60.114-123.:deny
70.160-191.:deny
70.165.69.82:deny
74.207.224-255.:deny
74.208.72.28:deny
74.56.44.:deny
75.100.72.56-63:deny
77.231.:deny
78.189.98-117.:deny
78.241.181.213:deny
78.30.113.153:deny
79.107.212.75:deny
79.107.236.232:deny
79.136.208-209.:deny
80.13.:deny
80.248.79.:deny
81.10.128-255.:deny
81.128-143.:deny
81.198.128.92:deny
81.215.158.90:deny
82.178.88-95.:deny
83.49-51.:deny
83.70.160-255.:deny
83.71.0-94.:deny
83.8.28.254:deny
84.92.32-63.:deny
85.103.116.36:deny
85.139.128-239.:deny
85.214.16-139.:deny
85.29.158.70:deny
85.32-47.:deny
86.186.:deny
86.98.64-71.:deny
87.109.253.209:deny
88.147.185.214:deny
88.208.93.16-31:deny
88.231.190.91:deny
88.27.:deny
89.216.16-31.:deny
89.248.170-171.:deny
91.108.177.:deny
91.148.64-67.:deny
91.188.96-127.:deny
91.194.254-255.:deny
91.205.25.194:deny
91.209.12.:deny
91.215.8-11.:deny
91.240.94.:deny
92.44.208-215.:deny
92.45.128-171.:deny
92.45.200-207.:deny
92.80-82.:deny
93.107.104-111.:deny
93.154.243.34:deny
93.64-67.:deny
94.100.201.188:deny
94.102.52-55.:deny
94.102.63.129-255:deny
94.242.192-255.:deny
94.255.71.247:deny
95.212.20.7:deny
95.58.209.130:deny
95.58.34.:deny
96.126.96-127.:deny
96.56.176-191.:deny
96.8.112-127.:deny
98.100-103.:deny
98.172.176-183.:deny

そもそも、固定IPからのみ許可すればいいんだけど、そうもいかないので。

ちょっとやりかた考え中。

では。

bootstrap-datetimepicker.js での LocalTime対応

bootstrap-datetimepicker.js を使ってカレンダーを表示していたんだけど、任意の月しか選択出来ないようにしたかったので、ちょっと調べてみた。

どうやら、startDate と endDate のオプションを設定すれば、その日付範囲のみ選択可能となる模様。
参考サイト:https://github.com/smalot/bootstrap-datetimepicker

ちょっとやってみたんだけど、どうも1日ズレがある。

ソースを追ったりして色々と調べてみたところ、どうやらUCT標準時での計算をしており、時差が考慮されていなかった。

なので、startDate と endDate に時差分を加算したDateオブジェクトを渡すようにして対応。
参考サイト:ねじろぐ @drillbits様 メモ:JavaScript で システム時刻から別のタイムゾーンの時刻へ変換

<script type="text/javascript">
    // DateTimePickerで該当月しか選択出来なくする為、時差を考慮したDateオブジェクトを返す
    function getTargetUTCDate(d) {
        // クライアントPCシステム時刻
        var localTime = d.getTime();
        // localTimeのタイムゾーン差分(ミリ秒)
        var localOffset = d.getTimezoneOffset() * 60000;
        // UTC時刻(ミリ秒)
        var utc = localTime + localOffset;
        // 考慮したいタイムゾーンの差分(時間):日本の場合は-18時間
        var offset = -18.0;
        // これで目的のミリ秒がでるので
        var result = utc - (3600000 * offset);
        d = new Date(result);
        return d;
    }

    $(function() {
        // 該当月が 2013年11月の場合(Javascriptでの月の指定は-1する)
        var startdate = new Date(2013, 10, 1);
        var enddate = new Date(2013, 10, 30);
        $('#cal').datetimepicker({
            pickTime: false,
            pickSeconds: false,
            startDate: getTargetUTCDate(startdate),
            endDate: getTargetUTCDate(enddate)
        });
    });
</script>

これでちゃんと2013年11月1日~2013年11月30日までしか選択出来ないように出来た。

ダブルバウンスメールによるイタズラ対策

またもや久々に。

今回はメールサーバのお話。

自分が運用しているメールサーバは、vpopmail + qmail + tcpserver の構成。

最近、ダブルバウンスでのイタズラが多く、問題になってきたので qmail の badmailfrom でチマチマ対応してたけど、それも限界。

なので、rblsmtpd を導入してブラックリストを参照するように変更。

ブラックリストに載っていないサーバからもイタズラがあったので、tcpserver側の設定を少し追加。

以下、tcpserver の cdb の内容。

127.:allow,RELAYCLIENT="",RBLSMTPD=""
emobile.ad.jp:allow,RBLSMTPD=""
=.mail-b.net:allow,RBLSMTPD="-spam!!"
=iketani.com:allow,RBLSMTPD="-spam!!"
=ba.al:allow,RBLSMTPD="-spam!!"
103.15.214.0-127:allow,RBLSMTPD="-spam!!"
103.15.215.128-255.:allow,RBLSMTPD="-spam!!"
103.16.160-163.:allow,RBLSMTPD="-spam!!"
103.18.76-79.:allow,RBLSMTPD="-spam!!"
103.19.161.:allow,RBLSMTPD="-spam!!"
103.2.44-47.:allow,RBLSMTPD="-spam!!"
103.20.37.:allow,RBLSMTPD="-spam!!"
103.20.39.:allow,RBLSMTPD="-spam!!"
103.24.192-195.:allow,RBLSMTPD="-spam!!"
103.244.104-107.:allow,RBLSMTPD="-spam!!"
103.244.92-95.:allow,RBLSMTPD="-spam!!"
103.249.212.:allow,RBLSMTPD="-spam!!"
103.27.186.:allow,RBLSMTPD="-spam!!"
103.30.73.:allow,RBLSMTPD="-spam!!"
103.30.74.:allow,RBLSMTPD="-spam!!"
103.31.140-143.:allow,RBLSMTPD="-spam!!"
103.31.192-195.:allow,RBLSMTPD="-spam!!"
103.6.44-47.:allow,RBLSMTPD="-spam!!"
103.9.177.0-127.:allow,RBLSMTPD="-spam!!"
116.251.208-215.:allow,RBLSMTPD="-spam!!"
117.18.96-127.:allow,RBLSMTPD="-spam!!"
188.93.20-23.:allow,RBLSMTPD="-spam!!"
120.144-159.:allow,RBLSMTPD="-spam!!"
157.54-60.:allow,RBLSMTPD="-spam!!"
174.140.160-175.:allow,RBLSMTPD="-spam!!"
175.45.168-175.:allow,RBLSMTPD="-spam!!"
180.222.32-63.:allow,RBLSMTPD="-spam!!"
182.160.192-255.:allow,RBLSMTPD="-spam!!"
192.157.192-255.:allow,RBLSMTPD="-spam!!"
192.198.192-207.:allow,RBLSMTPD="-spam!!"
192.3.158.0-127:allow,RBLSMTPD="-spam!!"
217.20.253.:allow,RBLSMTPD="-spam!!"
219.235.16-31.:allow,RBLSMTPD="-spam!!"
58.80.99.211-213.:allow,RBLSMTPD="-spam!!"
62.244.0-63.:allow,RBLSMTPD="-spam!!"
96.8.112-127.:allow,RBLSMTPD="-spam!!"
:allow

ローカル配送と、外部からのイーモバイルは許可。

それ以外からは拒否。

もう少し細かく設定したいところなんだけど、だいたいSPAM送ってくる業者が使ってるプロバイダなんて、他のSPAM業者も使っているので、該当IP帯はガッツリ拒否。

上記である程度静かになり、今のところ、週1回、イタズラがあるかないかくらい。

ちなみに、東京や大阪の特定地域あたりにあるレンタルオフィス借りてる業者からのSPAMが結構多かった。

少し調べれば誰がそのドメインなどなどを契約してるかなんてすぐ分かるのに・・・

警告メール送ると大人しくなる業者がほとんどだけど、それでもダメな業者は通報してます。

では。

PHPでのバイト数の取得方法について

久々の更新でございます。

画面から入力された文字列のバイト数をPHPで取得する際にハマったので。

調べてみると、まず最初に目に付くのは「strlen()を使え」と。

しかしながら、環境によっては「strlen()がmb_strlen()にオーバーライドされる」との事。

で、下記のようにすれば取得出来ます、とのエントリを見つけたのでやってみたのですが・・・

$str_length = strlen(bin2hex($data)) / 2;

結果、ダメでした。
検証環境のサーバ設定にもよるのかもだけど、下記のようにバイト数が返却されるので、全角半角が混ざった文字列の場合、正確にバイト数が取得出来なかったのです。

1バイト(半角文字):2バイトの16進数で返却される
2バイト(全角文字):6バイトの16進数で返却される

結局、下記のように1文字ずつ調べて、というベタベタな感じに。

$str_length = 0;
for($i=0;$i<mb_strlen($data);$i++) {
  if(strlen(bin2hex(mb_substr($data, $i, 1))) == 6) {
    $str_length = $str_length + 2;
  } else {
    $str_length = $str_length + 1;
  }
}

もっとうまいやり方はあるんだろうけど、時間も無かったし。。

いずれ修正しよう。

CodeIgniter 2.0.2 + Oracle 10.2.0.3 の接続について

あまり日本語のエントリが無かったので、ちょっと書いてみる。
PHP+Oracleの環境については、手前味噌ですがこちらの記事を参照。
CodeIgniterの環境設定については、ユーザガイドを参照。

動作検証を実施したサーバ環境は、以下。
・CentOS 4.8
・Oracle 10.2.0.3
・Oracle Instant Client 11.0.2
・PHP 5.3.2
・CodeIgniter 2.0.2

設定したコンフィグの内容は以下。
application/config/database.php


$db[‘default’][‘hostname’] = ‘//DB_SERVER_IP:PORT/SID‘;
$db[‘default’][‘username’] = ‘USER_ID‘;
$db[‘default’][‘password’] = ‘PASSWORD‘;
$db[‘default’][‘database’] = ‘DATABASE_NAME‘;
$db[‘default’][‘dbdriver’] = ‘oci8’; ← コレ。「OCI8」のドライバを指定する
$db[‘default’][‘dbprefix’] = ”;
$db[‘default’][‘pconnect’] = TRUE;
$db[‘default’][‘db_debug’] = TRUE;
$db[‘default’][‘cache_on’] = FALSE;
$db[‘default’][‘cachedir’] = ”;
$db[‘default’][‘char_set’] = ‘utf8’;
$db[‘default’][‘dbcollat’] = ‘utf8_general_ci’;
$db[‘default’][‘swap_pre’] = ”;
$db[‘default’][‘autoinit’] = TRUE;
$db[‘default’][‘stricton’] = FALSE;


こんな感じで。

これであとはModel作ってSQL発行すればOK。
ActiveRecordでも問題無し。
簡単でした。

ちなみに、Oracleでシーケンスを取得するのにはこんな感じで。

function get_seq() {
  $this->db->SELECT(‘SEQUENCE_NAME.nextval as nextval’,FALSE)->FROM(‘dual’);
  $query = $this->db->get();
  return $query->result();
}

SELECT に 「FALSE」付けてあげないと、うまく取得出来ないです。
※勝手に「”」「’」とか付けちゃうので

では。

Oracle10g → 11g へのデータ移行

※2017/04/25 追記
こっちの記事の方がいいかも。
OracleのImport/Exportについて

32bit版Oracle10gから64bit版Oracle11gへのデータ移行手順を。
忘れない内に。

まず、10gの方でExport。

次に、11gの方でDB作成、ユーザ作成。

で、11gの方でImport。

Importオプションは以下。

imp system/manager@[インスタンス名] fromuser=[ユーザ名] touser=[ユーザ名] file=[Dumpデータファイルパス] log=[ログファイルパス]

以上で完了。

細かいオプションやら何やらは、環境に依って変わると思うので、マニュアル等で調べてくださいな。

では。

Windowsでのファイルバックアップについて その2

以前書いた記事に、WindowsResourceKitToolsのリンクが無かったので。

ここです。
Download details: Windows Server 2003 Resource Kit Tools

で、上記WindowsResourceKitToolsをインストール後、robocopyコマンドでバックアップを取る方法の記事はこちら。
Windowsでのファイルバックアップについて

では。