ここでは、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);