Scripts
Log over socket
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: 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.
log-over-socket
<?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;
}
?>
Reacties
0