Log over socket
Auteur: Onbekend - 16 oktober 2008 - 11:08 - Gekeurd door: Gerard - Hits: 989 - Aantal punten: (0 stemmen)
Deze functie biedt de mogelijkheid tot het communiceren middels een socket.
|
Code: |
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:
<?php
function log_callback($message) {
echo $message . "\n";
}
log_recieve('log_callback');
?>
<?php function log_callback($message) { } 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:
<?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;
}
?>
<?php define('LOG_SOCKET_PATH', '/tmp/log_socket'); function log_recieve($callback) { } chmod(LOG_SOCKET_PATH , 0777); try { while(true) { $callback($buffer); } } } } catch(Exception $e) { } } function log_send($message) { if(!$socket) { return false; } $success = false; $success = true; } return $success; } ?>
Download code (.txt)
|
|
Stemmen |
Niet ingelogd. |
|