PHP的日志流过滤器?
发布时间:2020-12-13 22:34:02 所属栏目:PHP教程 来源:网络整理
导读:我需要调试我的 PHP前端对另一台主机上的后端服务进行的套接字连接,我需要尽可能接近金属.我已经在各个级别抽象了连接,其中包括让我能够轻松地将 stream filters连接到连接.因此问题应该很容易解决:将流过滤器打包到一个类中,该类允许在发送或接收数据时执
我需要调试我的
PHP前端对另一台主机上的后端服务进行的套接字连接,我需要尽可能接近金属.我已经在各个级别抽象了连接,其中包括让我能够轻松地将
stream filters连接到连接.因此问题应该很容易解决:将流过滤器打包到一个类中,该类允许在发送或接收数据时执行任意回调,然后将这些回调附加到几个日志文件中.
唯一的麻烦是我的(天真?)期望应该有一些这样的过滤器实现浮动在线似乎是错误的!我不介意自己编写过滤器,但也许有一些我可以找不到的东西? 作为参考,我在“php日志流过滤器”上做了很多明显的变化. 更新:为了澄清,我正在寻找的东西可以让我编写与此类似的代码: $params = array( 'onDataSent' => function($data) { echo "Sent: $datan"; },'onDataReceived' => function($data) { echo "Received: $datan"; },); stream_filter_register('logging','HookableStreamFilter'); stream_filter_append($someStream,'logging',STREAM_FILTER_ALL,$params); 解决方法
对于后代,这是我结束的鞭打.过滤器本身派生自php_user_filter,在
stream_filter_register 的文档中对此进行了描述:
class HookableFilter extends php_user_filter { public function filter($in,$out,&$consumed,$closing) { $data = ''; while ($bucket = stream_bucket_make_writeable($in)) { $consumed += $bucket->datalen; $data .= $bucket->data; stream_bucket_append($out,$bucket); } call_user_func($this->params,$data); return PSFS_PASS_ON; } } 请注意,我直接使用$this-> params作为回调,这使得它在功能上非常简洁(有一个原因;见下文). 使用PHP注册过滤器: stream_filter_register('generic.hookable','HookableFilter'); 将过滤器附加到流: $callback = function($data) { /* log the data */ }; stream_filter_append($stream,'generic.hookable',STREAM_FILTER_READ,$callback); stream_filter_append($stream,STREAM_FILTER_WRITE,$callback); 重要提示:据我所见,如果您将过滤器附加到双工流的两个通道(例如,使用 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |