│
│192.168.1.1
┏┷┓
┃ ┃
┃ ┃WEB example1
┃ ┃
┗┯┛
│192.168.2.1
│
│192.168.2.2
┏┷┓
┃ ┃
┃ ┃DB example2
┃ ┃
┗┯┛
│
[postgres@example2 postgres]$ createdb object_test
CREATE DATABASE
[postgres@example2 postgres]$ psql object_test
Welcome to psql 8.0.3, the PostgreSQL interactive terminal.
Type: \copyright for distribution terms
\h for help with SQL commands
\? for help with psql commands
\g or terminate with semicolon to execute query
\q to quit
object_test=# CREATE TABLE object_test( --ラージオブジェクトのテーブル
object_test(# data_cd integer, --コード
object_test(# object oid, --オブジェクト
object_test(# fname text, --ファイル名
object_test(# type text, --タイプ
object_test(# size integer --サイズ
object_test(# );
CREATE TABLE
object_test=# REVOKE ALL ON TABLE object_test FROM PUBLIC;
REVOKE
object_test=# GRANT SELECT, INSERT, DELETE, UPDATE ON object_test TO nobody;
GRANT
object_test=# ALTER TABLE ONLY object_test ADD CONSTRAINT object_test_pkey PRIMARY KEY (data_cd);
NOTICE: ALTER TABLE / ADD PRIMARY KEY will create implicit index "object_test_pkey" for table "object_test"ALTER TABLE
object_test=# \q
テーブルの中身。
CREATE TABLE object_test( --ラージオブジェクトのテーブル
data_cd integer, --コード
object oid, --オブジェクト
fname text, --ファイル名
type text, --タイプ
size integer --サイズ
);
REVOKE ALL ON TABLE object_test FROM PUBLIC;
GRANT SELECT, INSERT, DELETE, UPDATE ON object_test TO nobody;
ALTER TABLE ONLY object_test ADD CONSTRAINT object_test_pkey PRIMARY KEY (data_cd);
スクリプトは、
/home/example/public_htmlに設置する。
db.incの中身。データベースに接続してます。
<?php
$DBconnect = pg_connect('host=192.168.2.2 dbname=object_test port=5432 user=nobody');
?>
upload.phpの中身
<?php
//DB定義
require_once "db.inc";
// アップロードされたファイルか?セキュリティチェックする
if (is_uploaded_file($_FILES['upfile']['tmp_name']) && ($_POST['status'] == 'touroku')){
//ビギン
pg_query($DBconnect,"begin");
//oidを取り出す
$oid = pg_lo_import($_FILES['upfile']['tmp_name']);
//ファイル名を取り出す
$att_name = $_FILES['upfile']['name'];
//配列からタイプを取り出す
$att_type = $_FILES['upfile']['type'];
//配列からサイズを取り出す
$att_size = $_FILES['upfile']['size'];
if (!empty($oid)){
//ファイル番号取得
//SQL生成
$sql = "";
$sql = $sql . "SELECT ";
$sql = $sql . "MAX(data_cd) AS data_cd ";
$sql = $sql . "FROM ";
$sql = $sql . "object_test ";
$result = pg_query($DBconnect, $sql);
if (pg_num_rows($result) > 0) {
$new_data_cd = pg_fetch_result ( $result, 0, 'data_cd');
}
//新しいファイル番号取得
$new_data_cd = $new_data_cd + 1;
//登録する
$sql ="";
$sql = $sql . "INSERT INTO object_test ";
$sql = $sql . "(data_cd, object, fname, type, size) ";
$sql = $sql . "VALUES ";
$sql = $sql . "('$new_data_cd', '$oid', '$att_name', '$att_type', '$att_size') ";
$result = pg_query($DBconnect, $sql);
//エラー確認
if(pg_affected_rows($result) > 0) {
pg_query($DBconnect, "commit");
echo " 登録されました。";
} else {
pg_query($DBconnect, "rollback");
echo " 登録失敗しました。";
}
}else{
echo " oid取得に失敗しました。";
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-JP">
<title>ラージオブジェクト・アップロード</title>
</head>
<body>
<font color=blue><h3>ラージオブジェクト・アップロード</h3></font>
<hr>
<form name="data" enctype="multipart/form-data" action="upload.php" method="post">
<input type="file" size="120" name="upfile">
<input type="hidden" name="status" value="touroku">
<input type="submit" value="Submit">
</form>
</body>
</html>