│ │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>