2006.07.28

Category: PostgreSQL / Tags:

日本語、カナなどのソートがおかしい場合 – [locale]ロケールの確認

どのDBにでもいいので次のSQLで確認してみてください。

xxxx=# show lc_collate;
lc_collate
————
C
(1 row)

ここがCでない場合、文字コードによっては、ソートが上手くいかない場合があります。
ちなみに、ロケールは、initdbをする段階で決定してしまうので、DB自体を再構築しない限りは
変更する事ができません。

2006.07.21

Category: PHP / Tags:

$_SERVER の一覧

http://www.pictnotes.jp/tmp/phpinfo.php
にアクセスした場合に、$_SERVER で得られる、データ一覧。
(適度に、手を加えています。)

$_SERVER[""UNIQUE_ID" "] = xxxxxxx-xxxxxxxxxxxxxxxx
$_SERVER["HTTP_HOST"] = www.pictnotes.jp
$_SERVER["HTTP_USER_AGENT"] = Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4
$_SERVER["HTTP_ACCEPT"] = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
$_SERVER["HTTP_ACCEPT_LANGUAGE"] = ja,en-us;q=0.7,en;q=0.3
$_SERVER["HTTP_ACCEPT_ENCODING"] = gzip,deflate
$_SERVER["HTTP_ACCEPT_CHARSET"] = Shift_JIS,utf-8;q=0.7,*;q=0.7
$_SERVER["HTTP_KEEP_ALIVE"] = 300
$_SERVER["HTTP_CONNECTION"] = keep-alive
$_SERVER["HTTP_COOKIE"] = “PHPSESSID” =xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$_SERVER["PATH"] = /sbin:/usr/sbin:/bin:/usr/bin
$_SERVER["SERVER_SIGNATURE"] =

Apache/2.0.xx Server at www.pictnotes.jp Port 80

$_SERVER["SERVER_SOFTWARE"] = Apache/2.0.xx
$_SERVER["SERVER_NAME"] = www.pictnotes.jp
$_SERVER["SERVER_ADDR"] = 219.xxx.xxx.xxx
$_SERVER["SERVER_PORT"] = 80
$_SERVER["REMOTE_ADDR"] = 221.xxx.xxx.xxx
$_SERVER["DOCUMENT_ROOT"] = /var/www/html
$_SERVER["SERVER_ADMIN"] = xxx@pictnotes.jp
$_SERVER["SCRIPT_FILENAME"] = /var/www/html/tmp/phpinfo.php
$_SERVER["REMOTE_PORT"] = 1111
$_SERVER["GATEWAY_INTERFACE"] = CGI/1.1
$_SERVER["SERVER_PROTOCOL"] = HTTP/1.1
$_SERVER["REQUEST_METHOD"] = GET
$_SERVER["QUERY_STRING"] = no value
$_SERVER["REQUEST_URI"] = /tmp/phpinfo.php
$_SERVER["SCRIPT_NAME"] = /tmp/phpinfo.php
$_SERVER["PHP_SELF"] = /tmp/phpinfo.php
$_SERVER["PATH_TRANSLATED"] = /var/www/html/tmp/phpinfo.php

2006.07.19

Category: JavaScript / Tags:

selectbox(セレクトボックス)の連動

Aのselectbox(セレクトボックス)を、切り替えたら、Bのselectbox(セレクトボックス)が
動的に切り替わるサンプル。

<SCRIPT LANGUAGE="JavaScript">
<!--
var datBox = new Array(
new Array(new Array("0101","AAA"),
new Array("0102","AAB"),
),
new Array(new Array("0201","BBA"),
new Array("0202","BBB"),
new Array("0203","BBC"),
),
new Array(new Array("0301","CCA"),
new Array("0302","CCB"),
new Array("0303","CCC"),
)
);
function listChange() {
document.getElementsByName('box_name2')[0].length = 1 ;
var y = document.getElementsByName('box_name1')[0].selectedIndex ;
for (var z = 0; z < datBox[y].length; z++){
document.getElementsByName('box_name2')[0].options[z] = new Option(datBox[y][z][1], datBox[y][z][0]);
}
}
//-->
</SCRIPT>
<select name="box_name1" onClick="listChange()";>
<option>default1</option>
<option>default2</option>
<option>default3</option>
</select>
<select name="box_name2">
<option>default1</option>
</select>

■おまけ、配列の部分を作成するPHPのサンプル

public function getClassJavaScriptArray($db){
$query = "SELECT id,name FROM table_name";
$result = pg_query($db, $query);
$i = 0 ;
$k = 0 ;
$old_id= null ;
echo "var datBox = new Array(\n new Array(";
while( @list( $id, $name ) = pg_fetch_array($result, $i) ){
if( $old_id == null ){
}elseif($id == $old_id){
echo ",\n           "  ;
}else{
echo "\n          ),\n new Array("  ;
}
$id = ereg_replace("^0","",$id);//ID が桁揃えとかの場合のみ
echo "new Array(\"{$id}\",\"{$name}\")" ;
$id = $id ;
++$i ;
}
echo "\n          )\n);\n";
}

2006.07.14

Category: PHP / Tags:

include or require の時のファイルへのパスのいろいろ

includeやrequireをする場合、間違いをなくすために、できるだけ絶対パスでの
呼び出しをこころがける。

■最初にアクセス(URL)したファイルを基準とする場合
require_once dirname($_SERVER['SCRIPT_FILENAME']).’/file.php’;

■現在動いているファイル(呼び出し先のファイルからさらに呼び出す場合)を基準とする場合
require_once dirname(__FILE__).’/file.php’;

■相対パスが絡む場合
require_once realpath(”../../index.php”);

$_SERVER['SCRIPT_FILENAME']
$_SERVER['DOCUMENT_ROOT']
__FILE__
dirname
realpath
の組み合わせで大体ことたります。
require_once realpath(dirname($_SERVER['SCRIPT_FILENAME']).’/../file.php’);
とかですね。

CRONでプログラムが動かない時の対処方

cronに設定したとたんプログラムが動かなくなったとき、多くの場合
1.ファイルの実行権限のつけ忘れ。
2.実行ユーザーによるパーミッション。
3.パスの書式
特に3について、かなり引っかかります。
基本的に、CRONで動かす場合、ファイルの呼び込み等は
サーバーのルートからの絶対パスで記述する事。
今実行しているファイルからの相対の位置でファイルを指定してた場合は
require_once realpath(dirname(__FILE__).’/../../php/conf.php’) ;
とかすると、絶対パスで展開されて、ファイルが無事読み込める。

PHP&Postfix – mail関数でReturn-Pathを設定する

PHP 5.0.5
postfix 2.1.4
mail(mb_send_mail)関数で、メールを送信するときに、Return-Pathを設定したい場合
第4パラメーターに、
$return = “hoge@hoge.com”;
$header = “Return-Path:$return”
mail($to, $subject, $message,$header);
と設定しても、上手くいきません。(書き換わりません)
その場合は、第5パラメーターをつかって
$additional_parameter = “-f $return”;
mail($to, $subject, $message,$header, $additional_parameter);
としてあげると、上手くいくかもしれません。
ちなみに、第5パラメーターは、PHP 4.0.5以上での利用可能です。

ログをコピーする – 日付をつけて保存

ログのローテーションはlogrotate等 でするとして
access_log.1.gz などを、日付付きで別途バックアップする。
cronの設定は、システムのローテーションに依存 ローテーションが終わっている時間に実行
– サンプルここから
#!/bin/bash
d=date “+%d”
w=date “+%w”
y=date “+%C%y”
m=date “+%m”
if [ ${m} -eq 12 ]
then
m=01
else
m=”0″expr ${m#0} – 1
fi
from_dir=/var/log/httpd
to_dir=/var/www/backup_log
cp ${from_dir}/access_log.1.gz ${to_dir}/backup_path/access_log_${y}${m}.gz
– ここまで
毎月月末にファイルをローテーションするので、6月のログは7月に実行する事に
なるため、前月に戻している。
bash(シェル)の算術計算は、exprを利用すること。
${m#0}の意味は、先頭が0の場合0を削除を意味してます。
ちなみにcronは
00 7 1 * * /var/www/backup_log/backup_log.sh
といった感じで、毎月1日の7時にコピーする設定にしました。

newsyslog – ログの管理(ローテーション)

freebsd に標準でついているログ管理ツール
/etc/newsyslog.conf を編集して管理する。
今回修正したいのは、apacheのログ
ログは、
/var/log/httpd/host_name/host_name-access.log
/var/log/httpd/host_name/host_name-error.log
の形式で保存
【newsyslog.confの書式】
logfilename [owner:group] mode count size when flags [/pid_file] [sig_num]
ログファイル名  所有者:グループ 権限 バックアップ数 ファイルサイズ いつ実行するか 圧縮形式 pidファイル
になってる。
logfilename は、ログ管理するファイルまでのパス
size と when は、それぞれ指定のサイズかくるか指定の時間がきたらログのローテーションを実行します。
apacheの場合、ログファイルを切り分けると、pidに対してシグナルを送ってあげないといけないので、 pid_file sig_num もあわせて設定します。
【具体的な設定例】
・日曜日の24時(月曜日の0時)にログの切り分けを行う。
・週に一回、48週間ログをためる。
・ログのパーミッションは644。
・gzipで圧縮する。
/var/log/httpd/host_name/host_name-access.log 644 48 * $W1D0 Z /var/run/httpd.pid 30

2006.07.04

Category: Apache / Tags:

logrotate の導入

下記URLを参考
http://cyberam.dip.jp/linux_foundation/systemlog/logrotate_main.html
で、freebsd に logrotate を導入(apacheのアクセスログ管理のため)
ports を利用。

ログのローテーションの種類

http://taizooo.g.hatena.ne.jp/keyword/apache%20log%20rotate
の、解説が便利です。
■ apache の log rotate の方法
* rotatelogs
o apache 付属のツール
o /usr/local/sbin/rotatelogs
o ログファイルを自動的に消さない
o log.YYYY-mm-dd といった日付をつけることができる.
* newsyslog
o FreeBSD システムツール
o /usr/sbin/newsyslog
o 指定した世代数を超えると、それより古いログファイルは自動的に削除
o log.0 , log.1 , log.2 といった名称になる
* logrotate
o ports ツリーの sysutils/logrotate
o 指定した世代数を超えると、それより古いログファイルは自動的に削除
o log.YYYY-mm-dd といった日付をつけることができる.
* daemontools
o これはある意味、飛び道具
o apache を daemontools でうごかして multilog で log をとる
– ここまで引用
こちらは、ログの名称に日時を入れたいので、logrotate か rotatelogs
を入れるようにする。

« Older Entries