[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 <?php 2 3 /* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <[email protected]> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12 namespace Symfony\Component\VarDumper\Server; 13 14 use Symfony\Component\VarDumper\Cloner\Data; 15 use Symfony\Component\VarDumper\Dumper\ContextProvider\ContextProviderInterface; 16 17 /** 18 * Forwards serialized Data clones to a server. 19 * 20 * @author Maxime Steinhausser <[email protected]> 21 */ 22 class Connection 23 { 24 private $host; 25 private $contextProviders; 26 27 /** 28 * @var resource|null 29 */ 30 private $socket; 31 32 /** 33 * @param string $host The server host 34 * @param ContextProviderInterface[] $contextProviders Context providers indexed by context name 35 */ 36 public function __construct(string $host, array $contextProviders = []) 37 { 38 if (!str_contains($host, '://')) { 39 $host = 'tcp://'.$host; 40 } 41 42 $this->host = $host; 43 $this->contextProviders = $contextProviders; 44 } 45 46 public function getContextProviders(): array 47 { 48 return $this->contextProviders; 49 } 50 51 public function write(Data $data): bool 52 { 53 $socketIsFresh = !$this->socket; 54 if (!$this->socket = $this->socket ?: $this->createSocket()) { 55 return false; 56 } 57 58 $context = ['timestamp' => microtime(true)]; 59 foreach ($this->contextProviders as $name => $provider) { 60 $context[$name] = $provider->getContext(); 61 } 62 $context = array_filter($context); 63 $encodedPayload = base64_encode(serialize([$data, $context]))."\n"; 64 65 set_error_handler([self::class, 'nullErrorHandler']); 66 try { 67 if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { 68 return true; 69 } 70 if (!$socketIsFresh) { 71 stream_socket_shutdown($this->socket, \STREAM_SHUT_RDWR); 72 fclose($this->socket); 73 $this->socket = $this->createSocket(); 74 } 75 if (-1 !== stream_socket_sendto($this->socket, $encodedPayload)) { 76 return true; 77 } 78 } finally { 79 restore_error_handler(); 80 } 81 82 return false; 83 } 84 85 private static function nullErrorHandler(int $t, string $m) 86 { 87 // no-op 88 } 89 90 private function createSocket() 91 { 92 set_error_handler([self::class, 'nullErrorHandler']); 93 try { 94 return stream_socket_client($this->host, $errno, $errstr, 3, \STREAM_CLIENT_CONNECT | \STREAM_CLIENT_ASYNC_CONNECT); 95 } finally { 96 restore_error_handler(); 97 } 98 } 99 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |