Toelichting:
In je website (lokaal draaiend) zet je hier en daar log_send("bericht") en in een cli-scriptje laat je log_recieve(callback) rondjes draaien. Iedere keer wanneer log_send wordt aangeroepen zal log_recieve in je andere proces 1 maal de callback aanroepen. Voorbeeldje van een callback:

[code=php]
<?php
function log_callback($message) {
    echo $message . "\n";
}

log_recieve('log_callback');
?> 

Je kan de log_recieve-lus stoppen door je callback-functie een exception te laten gooien. Maar gewoon met ctrl + c in je terminal het script stoppen is bij mij de meest gangbare manier. log_send() vereist geen draaiende log_recieve()

Heel simpel, maar in sommige gevallen, wanneer jouw script bijvoorbeeld op de achtergrond met een andere webservice moet praten en je de output niet wilt verstoren heel handig.

Code:
 
[code=php]
<?php

define('LOG_SOCKET_PATH', '/tmp/log_socket');

function log_recieve($callback) {
    if(file_exists(LOG_SOCKET_PATH)) {
        unlink(LOG_SOCKET_PATH);
    }
    
    $socket = socket_create(AF_UNIX, SOCK_STREAM, 0);

    socket_bind($socket, LOG_SOCKET_PATH);
    
    chmod(LOG_SOCKET_PATH, 0777);
        
    socket_listen($socket);

    socket_set_block($socket);

    try {
        while(true) {
            if(($connection = socket_accept($socket)) !== false) {
                while(socket_recv($connection, $buffer, 1024, 0)) {
                    $callback($buffer);
                }
                socket_close($connection);
            }
        }
    } catch(Exception $e) {
        socket_close($socket);
    }
}

function log_send($message) {
    $socket = @socket_create(AF_UNIX, SOCK_STREAM, 0);

    if(!$socket) {
        return false;
    }

    $success = false;

    if(@socket_connect($socket, LOG_SOCKET_PATH) && socket_write($socket, $message)) {
        $success = true;
    }
    
    socket_close($socket);
    
    return $success;
}

?> 

