• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • pg_lo_read_all()

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

    读入整个大型对象并直接发送给浏览器

    说明

    pg_lo_read_all(resource $large_object): int

    pg_lo_read_all()读入一个大型对象并在(PHP)发送完所有待发的 header 之后将其直接发送给浏览器。主要目的是发送图片或声音等二进制数据。返回值为读入的字节数,如果出错则返回FALSE

    要使用大型对象(lo)接口,需要将其放置在事务块中。

    Note:

    本函数以前的名字为pg_loreadall()

    参见pg_lo_read()。

    // remember, large objects must be obtained from within a transaction
    pg_query ($dbconn, "begin");
    // "assume" for this example that the large object resource number of the zipped file is "17899"
    $lo_oid = 17899;
    $handle_lo = pg_lo_open($dbconn,$lo_oid,"r") or die("<h1>Error.. can't get handle</h1>");
    //headers to send to the browser before beginning the binary download
    header('Accept-Ranges: bytes');
    header('Content-Length: 32029974'); //this is the size of the zipped file
    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>Error, can't read large object.</h1>");
    // committing the data transaction
    pg_query ($dbconn, "commit");
    Pay attention that if you omit the "length" parameter it will read a 8192 bytes object regardless to its real dimensions. If you want to use this function think to save the object size somewhere (usually a field in its table) before reading the object. Alternatively use the pg_lo_readall function.

    上篇:pg_lo_open()

    下篇:pg_lo_read()