PostgreSQL/PHPによるバイナリデータをbytea型に保存する方法
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#navi(../)
*PHPによるバイナリデータをbytea型に保存と取得する方法 [#t...
PHPスクリプトを使ってバイナリ列データ型(bytea)へのバイナ...
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
*関連記事 [#rb6a3383]
-[[PostgreSQL/PostgreSQL9.1をUbuntuにインストール]]
-[[Ubuntu上でLAPP環境の構築>http://linux.just4fun.biz/Ubu...
*外部参考記事 [#a46ac982]
-[[Let's postgres - PHPでのSQLインジェクション対策 - エス...
*使用した環境 [#w1a08990]
使用した環境は以下の通りです。
-OS
sakura@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
Codename: precise
-PostgreSQL
sakura@ubuntu:~$ sudo -i -u postgres
postgres@ubuntu:~$ psql -c "select version();"
version
--------------------------------------------------------...
PostgreSQL 9.1.11 on i686-pc-linux-gnu, compiled by gcc...
(1 row)
-PHP
postgres@ubuntu:~$ php -version
PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: D...
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technol...
*PHP向けPostgreSQLモジュールについて [#wfc3d9be]
以下のようなエラーが出る場合は、PHP用のPostgreSQL用のモジ...
PHP Fatal error: Call to undefined function pg_connect(...
Ubuntuの場合は、以下のコマンドでインストールしてください。
sudo apt-get install php5-pgsql
他のOS環境の場合は、php向けPostgreSQLのモジュールをインス...
*画像データを投入するPHPスクリプト [#d4efcf5b]
[[Let's postgres - PHPでのSQLインジェクション対策 - エス...
以下のようなデータベースおよびテーブルを作成しました。
postgres@ubuntu:~$ createdb img_db
postgres@ubuntu:~$ psql img_db -c "create table t1 (no i...
CREATE TABLE
**画像データをinsertしてみる [#wbc785ae]
-サンプルスクリプト
#ref(ins_img.php)
<?php
$DBNAME = 'img_db';
if ($argc != 3) {
echo "Usage: php $argv[0] <number> <image filename>\...
exit(1);
}
if (!is_numeric($argv[1])) {
echo $argv[1] . " is not numeric.\n";
exit(1);
}
if (!file_exists($argv[2])) {
echo $argv[2] . " file not found.\n";
exit(1);
}
$no = $argv[1];
$img_filename = $argv[2];
$img_data = file_get_contents($img_filename);
$dbconn = pg_connect("dbname=$DBNAME");
$sql = 'INSERT INTO t1 VALUES(' .
$no . ',' .
'\'' . pg_escape_string($dbconn,'\x' . bin2hex(...
')';
$res = pg_query($dbconn, $sql);
pg_close($dbconn);
?>
以下の画像データを用意しました。
#ref(sakura-it.zip)
|&ref(sakura-it.png);|
以下のコマンドでPostgreSQLに挿入してみます。
php ins_img.php 1 sakura-it.png
実際に実行したときの出力です。
postgres@ubuntu:~$ php ins_img.php 1 sakura-it.png
postgres@ubuntu:~$
postgres@ubuntu:~$ psql img_db -c 'select count(*) from ...
count
-------
1
(1 row)
**画像データと取り出す [#j73ff06d]
上記の手順でPostgreSQLに挿入した画像データ(PNG)を取り出し...
-サンプルスクリプト
#ref(get_img.php);
<?php
$DBNAME = 'img_db';
if ($argc != 2) {
echo "Usage: php $argv[0] <number> > filename\n";
exit(1);
}
if (!is_numeric($argv[1])) {
echo $argv[1] . " is not numeric.\n";
exit(1);
}
$no = $argv[1];
$dbconn = pg_connect("dbname=$DBNAME");
$sql = 'SELECT img FROM t1 WHERE ' .
'no = ' . $no;
$res = pg_query($dbconn, $sql);
echo pg_unescape_bytea(pg_fetch_result($res, 'img'));
pg_close($dbconn);
?>
以下のコマンドでPostgreSQLから上記で挿入した画像データを...
php get_img.php 番号(カラムnoの値) > 出力ファイル名
実際に実行したときの出力です。
postgres@ubuntu:~$ php get_img.php 1 > get_img.png
postgres@ubuntu:~$ diff sakura-it.png get_img.png
postgres@ubuntu:~$ echo $?
0
diffにより元データ(sakura-it.png)とget_img.phpスクリプト...
差異がないのが確認できます。
以上、bytea型に画像データを挿入と取得例でした。~
画像データに限らず、MS Officeの文書ファイルなどバイナリデ...
#htmlinsertpcsp(db-btm.html,db-sp.html)
終了行:
#navi(../)
*PHPによるバイナリデータをbytea型に保存と取得する方法 [#t...
PHPスクリプトを使ってバイナリ列データ型(bytea)へのバイナ...
#contents
#htmlinsertpcsp(db-top.html,db-sp.html)
*関連記事 [#rb6a3383]
-[[PostgreSQL/PostgreSQL9.1をUbuntuにインストール]]
-[[Ubuntu上でLAPP環境の構築>http://linux.just4fun.biz/Ubu...
*外部参考記事 [#a46ac982]
-[[Let's postgres - PHPでのSQLインジェクション対策 - エス...
*使用した環境 [#w1a08990]
使用した環境は以下の通りです。
-OS
sakura@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.04.3 LTS
Release: 12.04
Codename: precise
-PostgreSQL
sakura@ubuntu:~$ sudo -i -u postgres
postgres@ubuntu:~$ psql -c "select version();"
version
--------------------------------------------------------...
PostgreSQL 9.1.11 on i686-pc-linux-gnu, compiled by gcc...
(1 row)
-PHP
postgres@ubuntu:~$ php -version
PHP 5.3.10-1ubuntu3.9 with Suhosin-Patch (cli) (built: D...
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technol...
*PHP向けPostgreSQLモジュールについて [#wfc3d9be]
以下のようなエラーが出る場合は、PHP用のPostgreSQL用のモジ...
PHP Fatal error: Call to undefined function pg_connect(...
Ubuntuの場合は、以下のコマンドでインストールしてください。
sudo apt-get install php5-pgsql
他のOS環境の場合は、php向けPostgreSQLのモジュールをインス...
*画像データを投入するPHPスクリプト [#d4efcf5b]
[[Let's postgres - PHPでのSQLインジェクション対策 - エス...
以下のようなデータベースおよびテーブルを作成しました。
postgres@ubuntu:~$ createdb img_db
postgres@ubuntu:~$ psql img_db -c "create table t1 (no i...
CREATE TABLE
**画像データをinsertしてみる [#wbc785ae]
-サンプルスクリプト
#ref(ins_img.php)
<?php
$DBNAME = 'img_db';
if ($argc != 3) {
echo "Usage: php $argv[0] <number> <image filename>\...
exit(1);
}
if (!is_numeric($argv[1])) {
echo $argv[1] . " is not numeric.\n";
exit(1);
}
if (!file_exists($argv[2])) {
echo $argv[2] . " file not found.\n";
exit(1);
}
$no = $argv[1];
$img_filename = $argv[2];
$img_data = file_get_contents($img_filename);
$dbconn = pg_connect("dbname=$DBNAME");
$sql = 'INSERT INTO t1 VALUES(' .
$no . ',' .
'\'' . pg_escape_string($dbconn,'\x' . bin2hex(...
')';
$res = pg_query($dbconn, $sql);
pg_close($dbconn);
?>
以下の画像データを用意しました。
#ref(sakura-it.zip)
|&ref(sakura-it.png);|
以下のコマンドでPostgreSQLに挿入してみます。
php ins_img.php 1 sakura-it.png
実際に実行したときの出力です。
postgres@ubuntu:~$ php ins_img.php 1 sakura-it.png
postgres@ubuntu:~$
postgres@ubuntu:~$ psql img_db -c 'select count(*) from ...
count
-------
1
(1 row)
**画像データと取り出す [#j73ff06d]
上記の手順でPostgreSQLに挿入した画像データ(PNG)を取り出し...
-サンプルスクリプト
#ref(get_img.php);
<?php
$DBNAME = 'img_db';
if ($argc != 2) {
echo "Usage: php $argv[0] <number> > filename\n";
exit(1);
}
if (!is_numeric($argv[1])) {
echo $argv[1] . " is not numeric.\n";
exit(1);
}
$no = $argv[1];
$dbconn = pg_connect("dbname=$DBNAME");
$sql = 'SELECT img FROM t1 WHERE ' .
'no = ' . $no;
$res = pg_query($dbconn, $sql);
echo pg_unescape_bytea(pg_fetch_result($res, 'img'));
pg_close($dbconn);
?>
以下のコマンドでPostgreSQLから上記で挿入した画像データを...
php get_img.php 番号(カラムnoの値) > 出力ファイル名
実際に実行したときの出力です。
postgres@ubuntu:~$ php get_img.php 1 > get_img.png
postgres@ubuntu:~$ diff sakura-it.png get_img.png
postgres@ubuntu:~$ echo $?
0
diffにより元データ(sakura-it.png)とget_img.phpスクリプト...
差異がないのが確認できます。
以上、bytea型に画像データを挿入と取得例でした。~
画像データに限らず、MS Officeの文書ファイルなどバイナリデ...
#htmlinsertpcsp(db-btm.html,db-sp.html)
ページ名: