|
ここにある情報はかなり古くなっており、正しくなくなっている可能性があります。掲載しているサンプルコードiなどは、最新のPHPでは動作しない、もしくは、別途設定・調整が必要になるかも知れません。情報を鵜呑みにせず、あなたの手を動かして、あなたの目で確認してください。
「大量のデータをブラウザから登録したい」ことっていうのは、エンドユーザーからの要望でよくあることと思いますが、「1件ずつ手で登録してください」とか「コマンドをたたいて登録してください」なんて、なかなか受け入れてもらえません(-"-; ということで、ブラウザからデータファイル(今回は CSV/TSV 形式)をアップロードさせ、なおかつ、SQL*Loader で登録させてしまおうというものです。もちろん、ブラウザはファイルのアップロードに対応したものを使う必要があります。
仕組みは至って簡単で、PHP でサポートされているファイルアップロードと実行演算子(バッククォート「`」)を使ったバッチスクリプトの実行によって実現しています。
UNIX で実装する際の注意点としては、Apache の httpd.conf で指定したユーザーで実行・書込の権限を適宜与えておく必要があります。
●ldr.html
<FORM ACTION="ldr.php3" METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="2097152">
<TABLE BORDER=1>
<TR>
<TH NOWRAP>ファイル名</TH>
<TD>
<INPUT TYPE="file" NAME="filename" SIZE="60">
<INPUT TYPE="submit" VALUE="実行">
</TD>
</TR>
</TABLE>
</FORM>
●ldr.php
<?php
<TABLE BORDER=1>
<TR>
<TD NOWRAP>
<?php
$tgt_tbl = "hoge_mst";
$new_filename = $tgt_tbl.".txt";
if (!copy($filename, $new_filename)) {
die($new_filename."へのコピーに失敗しました...<br>");
}
if (!unlink($filename)) {
die("テンポラリファイルの削除に失敗しました...<br>");
}
if (!chmod($new_filename, 0666 )) {
die("テンポラリファイルの chmod に失敗しました...<br>");
}
$output = `/path/to/ldr.sh`;
?>
<PRE><?php echo $output; ?></PRE>
<A HREF="<?php echo $PATH_CSV_LOG.$tgt_tbl; ?>.log">
logファイルのダウンロード</A>
</TD>
</TR>
</TABLE>
?>
●shスクリプト
# bash
#具体的な設定値は、あなたの環境に合わせてください
export ORACLE_HOME=...
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=...
export LDR_HOME=...
export ORA_USER=...
export ORA_PWD=...
export ORA_CONSTR=...
export ORA_CTL=...
export ORA_DAT=...
export ORA_LOG=...
export ORA_BAD=...
export ORA_SKIP=0
export NLS_LANG=Japanese_Japan.JA16SJIS
sqlldr USERID=$ORA_USER/$ORA_PWD@$ORA_CONSTR \
CONTROL=$ORA_CTL/$1.ctl \
LOG=$ORA_LOG/$1.log \
BAD=$ORA_BAD/$1.bad \
DATA=$ORA_DAT/$1.txt \
SKIP=$ORA_SKIP
echo "Load終了..."
exit 0
|