pg_get_notify()
(PHP 4 >= 4.3.0, PHP 5, PHP 7)
Ping 数据库连接
说明
pg_get_notify(resource $connection[,int $result_type]): array
pg_get_notify()取得 SQL 命令NOTIFY发送的通告消息。要接收通告消息,必须发送 SQL 命令LISTEN。如果连接中有通告消息,则数组包含消息名并且返回后端的 PID。如果没有消息则返回FALSE
。
参见pg_get_pid()。
Example #1 PostgreSQL NOTIFY 消息
<?php $conn = pg_pconnect("dbname=publisher"); if (!$conn) { echo "An error occured.\n"; exit; } // Listen 'author_updated' message from other processes pq_query($conn, 'LISTEN author_updated;'); $notify = pg_get_notify($conn); if (!$notify) print("No messages\n"); else print_r($notify); ?>
Instant yet Simple PHP notification with HTML5 Server-Sent Events sse.php <?php $dbconn = new PDO("pgsql:host=localhost;dbname=mydb", "pduser", "userpass"); $dbconn->exec('LISTEN "channel_name"'); // those doublequotes are very important header("X-Accel-Buffering: no"); // disable ngnix webServer buffering header("Content-Type: text/event-stream"); header("Cache-Control: no-cache"); ob_end_flush(); // close PHP output buffering $inc=0; while (1) { $result = ""; // wait for one Notify 10seconds instead of using sleep(10) $result = $dbconn->pgsqlGetNotify(PDO::FETCH_ASSOC, 10000); if ( $result ) { echo "id: $inc\ndata: ".stripslashes(json_encode($result))."\n\n"; $inc++; } flush(); } ?> Tested with HTML+JS sample file from Mozilla web site (ssedemo.php)