[ PHP ] Oracle Lob型のデータを FTP 転送する

Pocket

ここでは、Oracle データベースの Lob 型のカラムの内容を FTP 転送するサンプルコードを掲載しています。

スポンサーリンク

Lob 型のデータを FTP 転送する

本サンプルでは、php://memory (または、php://temp) に対して LOB データをメモリ上に出力することで、Lob 型のデータを一旦ファイルへ出力することなく FTP 転送を行っています。詳細はサンプル中のコメントを参照ください。

// データベースへ接続する
$conn = oci_connect('user', 'password', 'dbname');

// LOB データを取得
$sql = 'select BLOB_DATA from table1';

$stmt = oci_parse($conn, $sql);

// sql の実行
oci_execute($stmt, OCI_NO_AUTO_COMMIT);

// 先頭のレコードのみ取得
$row = oci_fetch_array($stmt, OCI_ASSOC);
// blob データを取得
$blob_data = $row['BLOB_DATA'];

// デフォルト(2メガバイト)よりも大きなサイズの場合は以下のように
// php://temp を使用して、メモリの上限を変更することが可能である。
// ただし、上限を超える場合は、テンポラリファイルが使用される
$fp = fopen("php://memory", 'rwb');

// メモリの上限を変更し、上限を超えた場合にはテンポラリファイルが使用される
//$limit = 10 * 1024 * 1024; // 10メガバイトまで書き込みを許可する
//$fp = fopen("php://temp/maxmemory:$limit", 'rwb');

// LOBデータを メモリストリームに書き込む
while(!$blob_data->eof()) {
    fwrite($fp, $blob_data->read(8192));
}

// ファイルポインタを先頭に戻す
rewind($fp);

// 接続を確立する
$conn_id = ftp_connect('127.0.0.1');

// ユーザ名とパスワードでログインする
$login_result = ftp_login($conn_id, 'user', 'password');

// FTP ファイル転送
if (ftp_fput($conn_id, 'remote_file', $fp, FTP_ASCII)) {
    echo "Success";
} else {
    echo "Failed";
}

// 接続を閉じ、ファイルを閉じる
ftp_close($conn_id);

// ステートメントの解放
oci_free_statement($stmt);

// データベースから切断
oci_close($conn);
スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *