WEB開発のあれこれ
PHP,JAVA,Javascript,objective-c,Ajax,Flex,Air,Linuxなどなど
最近雑記帳になりつつある・・・
2011.10.23より忍者ブログより移転
2008年8月31日日曜日
2008年8月29日金曜日
2008年8月28日木曜日
スタティックIPアドレス設定
この記事を参考にしてルータの設定をし、反映する前にサーバー側の設定。
/etc/network/interfaceを下記の様に変更
��ルータIP:192.168.1.1)
auto eth0 ←これが無いとネットワークにすらつながらなくなります。
iface eth0 inet static
address 192.168.1.90
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
gateway 192.168.1.1
dns-nameservers 192.168.1.1
終わったらネットワーク再起動
/etc/init.d/networking restart
これでおk
apacheインストール
・samba導入してファイルサーバーとして
・LAMPPを導入してWEBサーバーとして(仕事でも役立てるかなと)
��つ思いついた
sambaの方は案外簡単に導入することができたので
LAMPPの方をやってみよう(スペック不足になりそうだがw)と言う事に
で、apacheの安定版の2.0.63のソースを取得し
./configure --prefix=/usr/local/apache2 --enable-so --enable-rewrite
でコンパイルしようとするとエラー
checking for C compiler default output file name... configure: error: C compiler cannot create executables
See `config.log' for more details.
configure failed for srclib/apr
むむむ、C、C++関連は入っているのだが・・・
と思ったらaptのリポジトリの設定が古いサイトだったらしくgccの最新版がダウソ出来なかったせいらしいorz
��これに一時間かけたよw)
前日記の設定を見直して
apt-get install gcc
でとりあえずコンパイルは通った
aptリポジトリ設定
aptの成功率?が悪いので良いリポジトリサイトが乗っているページをぐぐってみた。
結果/etc/apt/source.listは下記に決定
deb-src http://http.us.debian.org/debian testing main contrib non-free
deb-src http://http.us.debian.org/debian unstable main contrib non-free
deb ftp://ftp.dti.ad.jp/pub/Linux/debian/ stable main contrib non-free
deb-src ftp://ftp.dti.ad.jp/pub/Linux/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free適切なリポジトリを設定してくれるapt-spyなるものがあるらしいので、これもインストールapt-spyは失敗したときにsource.listを真っ白にしてくれるという凄技をもっていたので
#apt-get install apt-spy
使い方は下記
#apt-spy -d stable -s JP
お払い箱決定w
2008年8月27日水曜日
KDE構築
# yum groupinstall "KDE (K Desktop Environment)"
# yum install kde-i18n-Japanese
シェルの確認、変更
- 利用できるシェルの確認
$cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/ash
/bin/bsh
/bin/ksh
/usr/bin/ksh
/usr/bin/pdksh
/bin/tcsh
/bin/csh
- ログインシェルを変える (例 ここではtcshに設定
$chsh
hoge のシェルを変更します。
Password:
新しいシェル [/bin/bash]: /bin/tcsh
シェルを変更しました。
- 表示行数や桁数を変更
現在の設定を表示
$echo $LINES,$COLUMNS
24,80
行数、桁数を変更
$export LINES=30
$export COLUMNS=100
確認してみる
$echo $LINES,$COLUMNS
30,100
- シェル変数の一覧表示
$set
- 環境変数の一覧表示
$env
- コマンド履歴の表示
$history
- リソース制限の表示
$ulimit -a
- 現在、起動しているプログラムの表示
#ps ax
- システムの負荷を表示
$top
終了するにはCtrlとc を押す。
2008年8月26日火曜日
ランレベルの設定、変更
いっつも忘れてググル羽目になるのでメモ
/etc/inittab
id:3:initdefault:
の数値を変える事で変更可能
0 システム停止(予約)
1 シングルユーザーモード
2 テキストログイン・NFSなし
3 テキストログイン
4 未定義(一部のバージョンでインストーラが使用)
5 X Window System の起動
6 システム再起動(予約)
一時的に変更する場合
telinit 5
ランレベルの確認
/sbin/runlevel
debian ファイアウォール設定
iptables
以下rootにsuしてから行う
# iptables -P INPUT ACCEPT
# iptables -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
FORWARD以外まずはACCEPT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT //http
# iptables -A INPUT -p tcp --dport 443 -j ACCEPT //https
# iptables -A INPUT -p tcp --dport 21 -j ACCEPT //FTP
# iptables -A INPUT -p tcp --dport 110 -j ACCEPT //POP
# iptables -A INPUT -p tcp --dport 25 -j ACCEPT //SMTP
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT //SSH
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -p tcp --dport 5901 -j ACCEPT //VNCSERVER
sambaポートの開放
# iptables -A INPUT -i eth0 -s 192.168.24.0/24 -d 192.168.24.0/24 -p udp --dport 137:138 -j ACCEPT
# iptables -A INPUT -i eth0 -s 192.168.24.0/24 -d 192.168.24.0/24 -p tcp --dport 139 -j ACCEPT
最後にINPUTポリシーをDROP
# iptables -P INPUT DROP
# vi /etc/init.d/iptables
下記内容を記述
#!/bin/bash
start(){
iptables -F
iptables-restore < /etc/iptables.save
return 0
}
stop(){
iptables-save > /etc/iptables.save
return 0
}
case "$1" in
start)
start
;;
stop)
stop
;;
save)
stop
;;
restore)
start
;;
restart)
stop
start
;;
esac
その後
# chmod 755 /etc/init.d/iptables
# update-rc.d iptables defaults 18
# /etc/init.d/iptables save
これでファイアウォールの設定は完了
2008年8月25日月曜日
2008年8月22日金曜日
qmail + vpopmail + tcpserver
phpからのメール送信(mail,mb_send_mail)がうまくいかない
/var/log/mallogを見ると実行ユーザーでの認証が掛かってて、存在しないユーザーだから送信を拒否されてるみたい。
以前はこんなの気にした覚えなかったんだけどなぁ
vpopのせいかしら・・・
2008年8月19日火曜日
Linuxコマンド
自分用メモ
cd
カレントディレクトリを移動する
windowsのcdと同じですね。
用法
$cd フォルダパス(フルでも相対でも可)
pwd
カレントディレクトリを表示する。
実は役に立つコマンドだったり・・
用法
$pwd
->カレントディレクトリのフルパスを出力
cp
ファイルやディレクトリをコピーする。
これは慣れてない人だとGUIに軍配があがりますかね・・・
用法
$cp コピー元ファイルパス コピー先ファイルパス
オプション
-rf ディレクトリの構造そのまま丸ごとコピー
ps
稼動プロセスの一覧を表示
windowsでいうタスクマネージャーみたいなもの
用法
$ps ← ユーザーが実行したフォワードプロセスを表示
$ps aux | grep apache ← 全ユーザーのプロセスの中から'apache'という文字が入ったものを表示
オプション
色々あるのでman psで調べるべし
とりあえずaux覚えておけば問題ない
man
マニュアルを参照する。
割と便利です。新たなコマンドをインストールしたら一度は目を通しましょう。
用法
$man コマンド名
※対応してないコマンドもあるので、そのときは[cmd]--helpなどで調べましょう。
mv
ファイルやフォルダを移動、リネームする。
用法
$mv リネーム対象ファイルパス リネーム後ファイルパス
rm
ファイルやフォルダを削除する
用法
$rm 削除対象ファイルパス
オプション
-rf ディレクトリ内すべてのファイルを削除する。
rootでrmを使うときは注意しましょう。
rm -rf / とかやっちまったら目もあてられまへん
cat
ファイルの中身を出力する。
用法
$cat ファイルパス
私はもっぱらパイプ処理専用です。
grep
ファイルからパターンマッチした行を表示する
用法
$grep パターン ファイルパス
これももっぱらパイプ処理専用。
psやcatと共に使うとgood
less
ファイルビューワー
用法
$less ファイルパス
ファイルの中身を見ます。当然ですがバイナリは化け化けです。
とりあえず良く使われるコマンドは以上(もっとあるようでしたら追加します)
array_merge
array_merge
説明
array_merge() は、前の配列の後ろに配列を追加することにより、ひとつまたは複数の配列の要素をマージし、得られた配列を返します。
入力配列が同じキー文字列を有していた場合、そのキーに関する後に指定された値が、前の値を上書きします。しかし、配列が同じ添字番号を有していても 値は追記されるため、このようなことは起きません。
配列が一つだけ指定され、その配列が数字で添字指定されていた場合、 キーの添字が連続となるように振り直されます。
例 1. array_merge() の例
上の例の出力は以下となります。
|
例 2. 簡単な array_merge() の例
数値添字が振りなおされることに注意!
配列を完全に維持し、単に追加だけしたい場合には、+ 演算子を使用してください:
数値添字は維持され、関連が保持されます。
|
警告 | |||
array_merge() の動作は PHP 5 で変更されました。PHP 4 とは異なり、 array_merge() は、array 型のパラメータのみを受け取るようになりました。しかし、 他の型をマージするために型キャストを使用することも可能です。詳細は以下の例を参照してください。
|
2008年8月12日火曜日
携帯 入力ヘルパー
input要素の属性で文字入力モードを指定する場合、htmlだと
i-modeとez-web
istyle=1 (全角かな)
istyle=2 (半角カナ)
istyle=3 (英字/半角文字)
istyle=4 (数字/半角文字)
softbank
mode="hiragana" (全角かな)
mode="katakana" (半角カナ)
mode="alphabet" (英字/半角文字)
mode="numeric" (数字/半角文字)
で良かったのですが、xhtmlではこれが機能しません。
そこで登場するのが-wap-input-formatです。
i-modeとsoftbank
style="-wap-input-format:'*
→エスケープすると style="-wap-input-format:"*<ja:h>""
style="-wap-input-format:'*
→エスケープすると style="-wap-input-format:"*<ja:hk>""
style="-wap-input-format:'*
→エスケープすると style="-wap-input-format:"*<ja:en>""
style="-wap-input-format:'*
→エスケープすると style="-wap-input-format:"*<ja:n>""
ez-web
style="-wap-input-format:*M;"(全角かな)
style="-wap-input-format:*m;"(英字/半角文字)
style="-wap-input-format:*N;"(数字/半角文字)
という具合になります。
これを3キャリア共通にするためには;;で区切ってひとつながりに書くと大丈夫のようです。
style="-wap-input-format:"*<ja:h>";-wap-input-format:*M;"(全角かな)
style="-wap-input-format:"*<ja:hk>";-wap-input-format:*M;"(半角カナ)(ez-webは半角カナはなし)
style="-wap-input-format:"*<ja:en>";-wap-input-format:*m;"(英字/半角文字)
style="-wap-input-format:"*<ja:n>";-wap-input-format:*N;"(数字/半角文字)
2008年8月11日月曜日
携帯UA まとめ
- パソコンのブラウザと同様に、ドコモ、au、ソフトバンクの各携帯電話のブラウザのユーザーエージェントをプログラムで取得することができます。
- ユーザーエージェントを利用して機種判別やキャリア判別を行うことができます。
- ユーザーエージェントには、ドコモなら「DoCoMo」、au・TU-KAなら「UP.Browser」、ソフトバンクなら「J-PHONE」、「Vodafone」、「SoftBank」という文字が含まれてます。
これでキャリア判別を行います。
ただし、Vodafoneの一部の機種に「UP.Browser」という文字がユーザーエージェントの途中に含まれています。
「先頭の文字が何で始まるか」で判別した方が良いと思います。 - ユーザーエージェントには、機種名が含まれています。
- ユーザーエージェントのサンプル
ユーザーエージェントは、機種ごとにたくさんありますが、書き方のパターンは以下のどれかに当てはまります。
詳細は、各キャリア公式サイトを参照。- ドコモの例
- タイプ1(MOVA)
DoCoMo/1.0/N503i/c10
個体識別情報を得た場合は、
DoCoMo/1.0/N503i/c10/ser12345678901 - タイプ2(FOMA)
DoCoMo/2.0 N901iS(c100;TB;W24H12)
個体識別情報を得た場合は、
DoCoMo/2.0 N901iS(c100;TB;W24H12;ser123456789012345;icc12345678901234567890) - /c10や(c100)が付かず、機種名で終わる場合もある。
- 個体識別情報は、個体識別情報を参照。
- タイプ1(MOVA)
- auの例
- 旧タイプ
UP.Browser/3.04-SN12 UP.Link/3.4.4 - 新タイプ
KDDI-HI21 UP.Browser/6.0.2.254 (GUI) MMP/1.1 - auは機種名ではなく、デバイスタイプ(SN12など)で表記されている。
デバイスタイプと製品名の対応表は、キャリアのサイトにある。
- 旧タイプ
- ソフトバンクの例
- SoftBank 4-2 Series(Jフォン時代のもの)
J-PHONE/3.0/J-SH07 - SoftBank 6-5 Series(Jフォン時代のもの)
J-PHONE/4.0/J-SH51/SN12345678901 SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0 - SoftBank 3G Series(ボーダフォン時代のもの)
Vodafone/1.0/V904SH/SHJ001/SN123456789012345 Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 - SoftBank 3G Series(ソフトバンク時代のもの)
SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1 - 基本的に、J-PHONE(or Vodafone or SoftBank)/ブラウザバージョン/機種名/その他、になってます。
- SoftBank 4-2 Series(Jフォン時代のもの)
- ドコモの例
- IP帯域
パソコンのブラウザでは、任意のユーザーエージェントに設定できるものがあります。
ユーザーエージェントを携帯電話と同じにして、携帯サイトへアクセスされることも予想されます。
完璧にパソコンからのアクセスを防ぐには、.htaccessなどで携帯電話で使われるIPアドレスの帯域を指定し、パソコンからのアクセスを防ぎます。
各キャリアが使用しているIPの帯域は、公式サイトで公開されています。 - ホスト名
ユーザーエージェントは、偽装できてもリモートのホスト名は、偽装できません。
ユーザーエージェントの他にホスト名も判別に入れれば、より精度が高くなります。- ドコモ
- docomo.ne.jp
- au
- ezweb.ne.jp
- ソフトバンク
- jp-d.ne.jp
jp-h.ne.jp
jp-t.ne.jp
jp-c.ne.jp
jp-k.ne.jp
jp-r.ne.jp
jp-n.ne.jp
jp-s.ne.jp
jp-q.ne.jp - jp-t などは、Jフォン東京などの名残。
- jp-d.ne.jp
- ドコモ
■キャリア判別のサンプルソース
- Perlの場合
#ユーザーエージェントのみで判別する場合
$agent = $ENV{'HTTP_USER_AGENT'};
if($agent =~ /^DoCoMo/){
}elsif($agent =~ /^J-PHONE|^Vodafone|^SoftBank/){
}elsif($agent =~ /^UP.Browser|^KDDI/){
}
#ホスト名も判別する場合
$agent = $ENV{'HTTP_USER_AGENT'};
$host = $ENV{'REMOTE_HOST'};
if($agent =~ /^DoCoMo/ && $host =~ /.+docomo\.ne\.jp$/){
}elsif($agent =~ /^J-PHONE|^Vodafone|^SoftBank/ && $host =~ /.+jp-.\.ne\.jp$/){
}elsif($agent =~ /^UP.Browser|^KDDI/ && $host =~ /.+ezweb\.ne\.jp$/){
} - PHPの場合
$agent = $_SERVER['HTTP_USER_AGENT'];
if(ereg("^DoCoMo", $agent)){
}else if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){
}else if(ereg("^UP.Browser|^KDDI", $agent)){
} - Javaの場合
String agent = request.getHeader("user-agent");
if(agent.indexOf("DoCoMo") == 0){
}else if(agent.indexOf("J-PHONE") == 0 || agent.indexOf("Vodafone") == 0 || agent.indexOf("SoftBank") == 0){
}else if(agent.indexOf("UP.Browser") == 0 || agent.indexOf("KDDI") == 0){
}
■機種判別のサンプルソース(機種名を取得する)
- Perlの場合
- ドコモ
$agent = $ENV{'HTTP_USER_AGENT'};
if(index($agent, "DoCoMo/1.0") >= 0 && index($agent, "/", 11) >= 0){
$device = substr($agent, 11, (index($agent, "/", 11) - 11));
}elsif(index($agent, "DoCoMo/2.0") >= 0 && index($agent, "(", 11) >= 0){
$device = substr($agent, 11, (index($agent, "(", 11) - 11));
}else{
$device = substr($agent, 11);
} - au(エージェントは、2タイプとも取得できる)
$agent = $ENV{'HTTP_USER_AGENT'};
$device = substr($agent, (index($agent, "-") + 1), (index($agent, " ") - index($agent, "-") - 1)); - ソフトバンク(x-jphone-msnameで機種名だけ取得できる)
$device = $ENV{'HTTP_X_JPHONE_MSNAME'};
- ドコモ
- PHPの場合
- ドコモ
$agent = $_SERVER{'HTTP_USER_AGENT'};
if(strpos($agent, "DoCoMo/1.0") >= 0 && strpos($agent, "/", 11) >= 0){
$device = substr($agent, 11, (strpos($agent, "/", 11) - 11));
}elsif(strpos($agent, "DoCoMo/2.0") >= 0 && strpos($agent, "(", 11) >= 0){
$device = substr($agent, 11, (strpos($agent, "(", 11) - 11));
}else{
$device = substr($agent, 11);
} - au(エージェントは、2タイプとも取得できる)
$agent = $_SERVER{'HTTP_USER_AGENT'};
$device = substr($agent, (strpos($agent, "-") + 1), (strpos($agent, " ") - strpos($agent, "-") - 1)); - ソフトバンク(x-jphone-msnameで機種名だけ取得できる)
$device = $_SERVER{'HTTP_X_JPHONE_MSNAME'};
- ドコモ
- Javaの場合
- ドコモ
String agent = request.getHeader("user-agent");
String device = "";
if(agent.indexOf("DoCoMo/1.0") >= 0 && agent.indexOf("/", 11) >= 0){
device = agent.substring(11, agent.indexOf("/", 11));
}else if(agent.indexOf("DoCoMo/2.0") >= 0 && agent.indexOf("(", 11) >= 0){
device = agent.substring(11, agent.indexOf("(", 11));
}else{
device = agent.substring(11);
} - au(エージェントは、2タイプとも取得できる)
String agent = request.getHeader("user-agent");
String device = agent.substring(agent.indexOf("-") + 1, agent.indexOf(" ")); - ソフトバンク(x-jphone-msnameで機種名だけ取得できる)
String device = request.getHeader("x-jphone-msname");
- ドコモ
携帯UA 振り分け
MOVA ブラウザフォン
DoCoMo/1.0で始まる。
DoCoMo/1.0/N505iS/c20/TB/W20H10
FOMA (XHTML)
DoCoMo/2.0で始まる。
DoCoMo/2.0 F901iC(c100;TB;W23H12)
SoftBank
1G, 2G
J-PHONEで始まる。
J-PHONE/5.0/V801SH/SN000000000 SH/0005aa Profile
/MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/JSCL-1.1.0
3G (XHTML)
MOT-C980かMOT-V980で始まる。
MOT-C980/80.2F.2E. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
MOT-V980/80.2F.2E. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
3G (XHTML)
Vodafoneで始まるが、AUと同じUP.Browserが含まれる場合がある。
Vodafone/1.0/V802SH/SHJ000 Browser/UP.Browser/7.0.2.1 Profile
/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2
3G (XHTML)
SoftBankで始まる。
SoftBank/1.0/910T/TJ001/SN Browser/NetFront/3.3 Profile
/MIDP-2.0 Configuration/CLDC-1.1
AU
WAP1 (HDML)
UP.Browserが含まれる。
UP.Browser/3.04-CA14 UP.Link/3.4.5.8
SIE-M65/12 UP.Browser/7.0.0.1.c.3 (GUI) MMP/2.0 Profile
/MIDP-2.0 Configuration/CLDC-1.1
WAP2 (XHTML)
KDDI-で始まる。
KDDI-CA23 UP.Browser/5.2.0.1.126 (GUI) MMP/2.0
WILLCOM
EDGE LINK
PDXGWで始まる。
PDXGW/1.0 (TX=8;TY=7;GX=96;GY=84;C=C256;G=BF;GI=2)
Air EDGE PHONE
DDIPOCKETが含まれる。
Mozilla/3.0 (DDIPOCKET;KYOCERA/AH-K3001V/1.5.2.8.000/0.1
/C100) Opera 7.0
Mozilla/3.0 (DDIPOCKET;JRC/AH-J3001V,AH-J3002V/1.0/0100
/c50) CNF/2.0
WILLCOM
WILLCOMが含まれる。
Mozilla/3.0(WILLCOM;SANYO/WX310SA/2;1/1/C128) NetFront/3.3
Mozilla/3.0(WILLCOM;KYOCERA/WX300K/1;1.0.2.8.000000/0.1/C100) Opera/7.0
携帯UAの固体識別番号
// MOVA
DoCoMo/1.0/X503i/c10/ser12345678901
serの後に11桁英数字
// FOMA
DoCoMo/2.0 N2001(c10;ser12345678901;
icc12345678901234567890)
serの後に15桁英数字
iccの後に20桁英数字
改行が含まれます。
PLAIN TEXTPHP: // ser以降で判別$agent = $_SERVER['HTTP_USER_AGENT'];$hasSubno = preg_match('/ser[0-9A-Za-z]{11,15}/', $agent);
SoftBank
// Vodafone
Vodafone/1.0/V802SH/SHJ002/SN123456789012345 Browser/UP.Browser/7.0.2.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Pr
// SoftBank
SoftBank/1.0/705P/PJP10/SN123456789012345 Browser/Teleca-Browser/3.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1
いずれも/SNの後に15桁英数字
PLAIN TEXTPHP: // /SN以降で判別$agent = $_SERVER['HTTP_USER_AGENT'];$hasSubno = preg_match('/\/SN[0-9A-Za-z]{15}/', $agent);
AU
AUの場合だけ先にユーザーエージェントに番号を付けます。
PLAIN TEXTPHP: // 05051234567890_ae.ezweb.ne.jp// 4桁地域コードと10桁端末コード$subno = $_SERVER['HTTP_X_UP_SUBNO'];// KDDI-CA23 UP.Browser/5.1 (GUI) MMP/2.0/SUB05051234567890_ae$_SERVER['HTTP_USER_AGENT'] .= '/SUB'.substr($subno, 0, -12);
PLAIN TEXTPHP: // 連結した末尾で判別$agent = $_SERVER['HTTP_USER_AGENT'];$hasSubno = preg_match('/\/SUB0\d0\d\d{10}_[a-z\d]{2}$/', $agent);