(PHP 8 >= 8.4.0)
Pdo\Pgsql::lobOpen β ΠΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°
ΠΠ΅ΡΠΎΠ΄ Pdo\Pgsql::lobOpen() ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π΄Π°Π½Π½ΡΠΌ,
Π½Π° ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠ»Π°Π΅ΡΡΡ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ oid.
Π Π°Π±ΠΎΡΡ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π²ΡΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ
Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ fread(), fwrite() ΠΈΠ»ΠΈ fgets().
ΠΠ°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
Π€ΡΠ½ΠΊΡΠΈΡ ΠΈ Π²ΡΠ΅ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΡΡΠΈΠΈ Ρ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΡΠ·ΡΠ²Π°ΡΡΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΠΈ.
oidΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ°.
mode
Π Π΅ΠΆΠΈΠΌ Π΄ΠΎΡΡΡΠΏΠ°. ΠΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π² ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ mode
Π·Π½Π°ΡΠ΅Π½ΠΈΡ w ΠΈΠ»ΠΈ + ΠΏΠΎΡΠΎΠΊ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ
Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ; ΠΈΠ½Π°ΡΠ΅ ΠΏΠΎΡΠΎΠΊ ΠΎΡΠΊΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
Π€Π»Π°Π³ b, ΠΊΠΎΡΠΎΡΡΠΌ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π΄Π²ΠΎΠΈΡΠ½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ, ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅ΡΡΡ.
ΠΡΠ΅Π΄ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "rb" ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΡΠΈ ΡΡΠΏΠ΅ΡΠ½ΠΎΠΌ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ»ΠΈ false, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ΠΎΡΠΈΠ±ΠΊΠ°.
ΠΡΠΈΠΌΠ΅Ρ #1 ΠΡΠΈΠΌΠ΅Ρ ΠΎΡΠΊΡΡΡΠΈΡ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Pdo\Pgsql::lobOpen()
ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π° Pdo\Pgsql::lobCreate(), ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ Π² Π±ΡΠ°ΡΠ·Π΅Ρ.
<?php
$db = new Pdo\Pgsql('pgsql:dbname=test host=localhost', $user, $pass);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$stmt = $db->prepare("SELECT oid FROM BLOBS WHERE ident = ?");
$stmt->execute([$some_id]);
$stmt->bindColumn('oid', $oid, PDO::PARAM_STR);
$stmt->fetch(PDO::FETCH_BOUND);
$stream = $db->lobOpen($oid, 'r');
header("Content-type: application/octet-stream");
fpassthru($stream);