login  Naam:   Wachtwoord: 
Registreer je!
 Scripts:

Scripts > PHP > Snippets > Log over socket

Log over socket

Auteur: Onbekend - 16 oktober 2008 - 11:08 - Gekeurd door: Gerard - Hits: 941 - 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:

  1. <?php
  2. function log_callback($message) {
  3. echo $message . "\n";
  4. }
  5.  
  6. log_recieve('log_callback');
  7. ?>

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:

  1. <?php
  2.  
  3. define('LOG_SOCKET_PATH', '/tmp/log_socket');
  4.  
  5. function log_recieve($callback) {
  6. if(file_exists(LOG_SOCKET_PATH)) {
  7. unlink(LOG_SOCKET_PATH);
  8. }
  9.  
  10. $socket = socket_create(AF_UNIX, SOCK_STREAM, 0);
  11.  
  12. socket_bind($socket, LOG_SOCKET_PATH);
  13.  
  14. chmod(LOG_SOCKET_PATH, 0777);
  15.  
  16. socket_listen($socket);
  17.  
  18. socket_set_block($socket);
  19.  
  20. try {
  21. while(true) {
  22. if(($connection = socket_accept($socket)) !== false) {
  23. while(socket_recv($connection, $buffer, 1024, 0)) {
  24. $callback($buffer);
  25. }
  26. socket_close($connection);
  27. }
  28. }
  29. } catch(Exception $e) {
  30. socket_close($socket);
  31. }
  32. }
  33.  
  34. function log_send($message) {
  35. $socket = @socket_create(AF_UNIX, SOCK_STREAM, 0);
  36.  
  37. if(!$socket) {
  38. return false;
  39. }
  40.  
  41. $success = false;
  42.  
  43. if(@socket_connect($socket, LOG_SOCKET_PATH) && socket_write($socket, $message)) {
  44. $success = true;
  45. }
  46.  
  47. socket_close($socket);
  48.  
  49. return $success;
  50. }
  51.  
  52. ?>

Download code! Download code (.txt)

 Stemmen
Niet ingelogd.

 Reacties
Post een reactie
Geen reacties (0)
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.028s