zoukankan      html  css  js  c++  java
  • php monolog 的写日志到unix domain socket 测试终于成功

    在另外一个客户端执行 php s.php后, 通过nc -lU /tmp/tg.sck 建立的unix domain socket 有接收到消息。

    <?php
    require 'vendor/autoload.php';
    
    use MonologLogger;
    use MonologHandlerSocketHandler;
    
    // Create the logger
    $logger = new Logger('my_logger');
    
    // Create the handler
    $handler = new SocketHandler('unix:///tmp/tg.sck');
    $handler->setPersistent(true);
    
    // Now add the handler
    $logger->pushHandler($handler, Logger::DEBUG);
    
    // You can now use your logger
    $logger->info('My logger is now ready');
    

      

    --------------------------------------------------------------------------

    php (or python) listen to unix domain stream socket

    I need to create a script that listens to a unix socket and forward the incoming stream to a bot. The scripts are unable to connect. The issues seems to be related to the order of things.

    Proof of case

    I have created a socket and I am able to write to it. In session 1, I create a listener connection

    nc -lU /tmp/tg.sck

    In session 2, I write to the socket.

     while true; do echo "hello"; sleep 2; done | nc -U /tmp/tg.sck

    The above only works if I do it in that order. ==> Writing before you have a listener results in an error.

    Using scripts (does not work)

    When I replace the listing process with a PHP (or Python) script, the connection is refused because the socket is not opened.

    $ python test.py 
    Connecting...
    socket.error: [Errno 111] Connection refused

    or

    $ php test.php 
    Warning:  fsockopen(): unable to connect to unix:///tmp/tg.sck:-1 (Connection refused)

    Changing the order of things

    If I start a working listener using the command nc -lU /tmp/tg.sck then the script does not die, but the writer process does.

    Listener scripts

    import socket
    import sys
    
    server_address = '/tmp/tg.sck'  # Analogous to TCP (address, port) pair
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect(server_address)
    sock.recv(512)

    and the php script

    $fp = fsockopen('unix:///tmp/tg.sck', -1, $errno, $errstr, 30);
    if (!$fp) {
      echo "$errstr ($errno)<br />
    ";
    } else {
      while (!feof($fp)) {
        echo fgets($fp, 4096);
      }
      fclose($fp);
    }
  • 相关阅读:
    vi错误terminal too wide解决方法
    怎么重启shell ubuntu
    程序异常退出 却没有产生core文件
    Linux执行shell脚本方式及区别&命令后台运行
    Linux C程序异常退出怎么办——core文件帮你忙
    Linux中生成Core Dump系统异常信息记录文件的教程
    Linux环境下段错误的产生原因及调试方法小结
    Linux core dump file详解
    putty工具常见设置
    Download PuTTY: latest development snapshot
  • 原文地址:https://www.cnblogs.com/oxspirt/p/8568476.html
Copyright © 2011-2022 走看看