PHP Conference Japan 2024

pg_lo_read_all

(PHP 4 >= 4.2.0, PHP 5, PHP 7, PHP 8)

pg_lo_read_all读取整个大对象并直接发送到浏览器

描述

pg_lo_read_all(PgSql\Lob $lob): int

pg_lo_read_all() 读取一个大对象,并在发送所有挂起的标头后将其直接传递到浏览器。主要用于发送二进制数据,例如图像或声音。

要使用大对象接口,需要将其包含在事务块中。

注意:

此函数以前称为 pg_loreadall()

参数

lob

一个 PgSql\Lob 实例,由 pg_lo_open() 返回。

返回值

读取的字节数。

变更日志

版本 描述
8.1.0 lob 参数现在需要一个 PgSql\Lob 实例;以前,需要一个 资源

示例

示例 #1 pg_lo_read_all() 示例

<?php
header
('Content-type: image/jpeg');
$image_oid = 189762345;
$database = pg_connect("dbname=jacarta");
pg_query($database, "begin");
$handle = pg_lo_open($database, $image_oid, "r");
pg_lo_read_all($handle);
pg_query($database, "commit");
?>

参见

添加备注

用户贡献的注释 2 条注释

robert dot bernier5 at sympatico dot ca
20 年前
// 请记住,必须在事务中获取大对象
pg_query ($dbconn, "begin");

// 此示例“假设”压缩文件的 large object 资源编号为“17899”

$lo_oid = 17899;

$handle_lo = pg_lo_open($dbconn,$lo_oid,"r") or die("<h1>错误..无法获取句柄</h1>");

// 在开始二进制下载之前发送到浏览器的标头
header('Accept-Ranges: bytes');
header('Content-Length: 32029974'); // 这是压缩文件的大小
header('Keep-Alive: timeout=15, max=100');
header('Content-type: Application/x-zip');
header('Content-Disposition: attachment; filename="superjob.zip"');

pg_lo_read_all($handle_lo) or
die("<h1>错误,无法读取大对象。</h1>");

// 提交数据事务
pg_query ($dbconn, "commit");
fabar2 at libero dot it
13 年前
请注意,如果您省略“length”参数,它将读取 8192 字节的对象,而不管其实际尺寸如何。如果您想使用此函数,请考虑在读取对象之前将对象大小保存到某个位置(通常是其表中的一个字段)。或者使用 pg_lo_readall 函数。
To Top