|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2014-12-29 06:17 UTC] ffortuny at gmail dot com
Description: ------------ --- From manual page: http://www.php.net/function.ibase-wait-event --- $con=gldbConnect(); $ev1="newmsgi".$idu; $ev2="usrout".$idc; $ev3="usrin".$idc; $ev4="chat".$idu; $ev=ibase_wait_event($con,$ev1,$ev2,$ev3,$ev4); error_log($ev1."-".$ev2."-".$ev3."-".$ev4."- de base: ".$ev); Test script: --------------- $con=gldbConnect(); $ev1="newmsgi".$idu; $ev2="usrout".$idc; $ev3="usrin".$idc; $ev4="chat".$idu; $ev=ibase_wait_event($con,$ev1,$ev2,$ev3,$ev4); error_log($ev1."-".$ev2."-".$ev3."-".$ev4."- de base: ".$ev); In this code, the Firebird Database posts events depending on any one of 4 possible table inserts or updates. $ev1 "newmsgi".$idu is generated when a new message is sent to user $idu. This works fine all the time. Is it because it is the first argument? If usrin or chat happen, then ibase_wait_event reports "usrout"; if usrout happens, ibase_wait_event reports NOTHING (does not end anything to the error_log) Expected result: ---------------- the expected result is that when this code is executed: $con=gldbConnect(); $ev1="newmsgi".$idu; $ev2="usrout".$idc; $ev3="usrin".$idc; $ev4="chat".$idu; $ev=ibase_wait_event($con,$ev1,$ev2,$ev3,$ev4); error_log($ev1."-".$ev2."-".$ev3."-".$ev4."- de base: ".$ev); the above code is executed, $ev will take the value of the actual event that Firebird Sent. This was OK in versión 5.3 of PHP. As I just Actual result: -------------- $ev1 "newmsgi".$idu is generated when a new message is sent to user $idu. This works fine all the time. Is it because it is the first argument? If usrin or chat happen, then ibase_wait_event reports "usrout"; if usrout happens, ibase_wait_event reports NOTHING (does not send anything to the error_log) PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sat Oct 25 23:00:01 2025 UTC |
This is ONE work-around (it the case of 4 events): <?php header('Content-Type: text/event-stream'); header('Cache-Control: no-cache'); $idu=$_REQUEST["idu"]; $idc=$_REQUEST["idc"]; $con = ibase_connect(...) or die(json_encode(array("Error"=>ibase_errmsg()))); $ev0="noev0"; $ev01="noev01"; $ev02="noev02"; $ev03="noev03"; $ev04="noev04"; $ev05="noev05"; $ev06="noev0"; $ev1="newmsgi".$idu; $ev2="usrin".$idc; $ev3="usrout".$idc; $ev4="chat".$idu; $ev = ibase_wait_event($ev1,$ev0,$ev2,$ev01,$ev3,$ev02,$ev4); error_log("Evento regresado el idu ".$idu." idc ".$idc.": ".$ev); /* $ev1 = $ev1 $ev0 = $ev2 $ev2 = $ev3 $ev01 = $ev4 */ switch($ev){ case $ev1: $sql="sata: {$m}\n\n"; flush(); } break; case $ev0: $sql="select f flush(); break; case $ev2: $sql="sel flush(); break; case $ev01: $sql="sele flush(); break; } ?> as you can see in the code above, the REAL events the database Firebird sends are: $ev1, $ev2, $ev3 and $ev4 However, ibase_wait_event receives them in a different order: $ev1 goes to $ev1 (no change) $ev2 goes to $ev0 (3rd goes to 2nd) $ev3 goes to $ev2 (5th goes to 3rd) $ev4 goes to $ev01 (7th goes to 4th) There is a patter there; but this is about catching events, not about figuring out patterns. Is there somebody in the world in charge of fixing this bug? Otherwise, where is the source?