private function getLaraextConsole() { if (is_null($this->__laraext_console)) { $params = \Config::get("laraext.console"); if (!$params['enabled']) { return null; } if (empty($GLOBALS['laraext_console_storage_installed'])) { \PhpConsole\Connector::setPostponeStorage(new \PhpConsole\Storage\File(storage_path('laraext-php-console.dat'), true)); $GLOBALS['laraext_console_storage_installed'] = true; } $connector = \PhpConsole\Connector::getInstance(); if (!empty($params['password'])) { $connector->setPassword($params['password'], true); } if (!empty($params['ips'])) { $connector->setAllowedIpMasks(explode(",", $params['ips'])); } $this->__laraext_console = \PhpConsole\Handler::getInstance(); if (!$this->__laraext_console->isStarted()) { if (empty($params['catch_errors'])) { $this->__laraext_console->setHandleErrors(false); $this->__laraext_console->setHandleExceptions(false); $this->__laraext_console->setCallOldHandlers(false); } $this->__laraext_console->start(); } } return $this->__laraext_console; }
/** * Init. * * @since 1.0.0 */ public function __construct() { $this->plugin_name = 'WP PHP Console'; $this->plugin_slug = 'wp-php-console'; $this->version = '1.4.0'; $this->options = $this->get_options(); // Bail out if PHP Console can't be found if (!class_exists('PhpConsole\\Connector')) { return; } // By default PHP Console uses PhpConsole\Storage\Session for postponed responses, // so all temporary data will be stored in $_SESSION. // But there is some problem with frameworks like WordPress that override PHP session handler. // PHP Console has alternative storage drivers for this - we will write to a temporary file: $phpcdir = dirname(__FILE__) . '/tmp'; $make_dir = wp_mkdir_p($phpcdir); if ($make_dir === true) { try { $storage = new PhpConsole\Storage\File($phpcdir . '/' . md5(__FILE__) . '_pc.data'); PhpConsole\Connector::setPostponeStorage($storage); } catch (\Exception $e) { // TODO $storage is under DOCUMENT_ROOT - it's insecure but did not find another solution in WP // $this->print_notice_exception( $e ); } } // Perform PHP Console initialisation required asap for other code to be able to output to the JavaScript console $connector = PhpConsole\Connector::getInstance(); // Apply 'register' option to PHP Console if (!empty($this->options['register']) && !class_exists('PC', false)) { // Only if PC not registered yet try { PhpConsole\Helper::register(); } catch (\Exception $e) { $this->print_notice_exception($e); } } // Apply 'stack' option to PHP Console if (!empty($this->options['stack'])) { $connector->getDebugDispatcher()->detectTraceAndSource = true; } // Apply 'short' option to PHP Console if (!empty($this->options['short'])) { try { $connector->setSourcesBasePath($_SERVER['DOCUMENT_ROOT']); } catch (\Exception $e) { $this->print_notice_exception($e); } } // Translation add_action('plugins_loaded', array($this, 'set_locale')); // Admin menu add_action('admin_menu', array($this, 'register_settings_page')); // Delay further PHP Console initialisation to have more context during Remote PHP execution add_action('wp_loaded', array($this, 'init')); }
private function initConnector(Connector $connector = null) { if (!$connector) { if ($this->options['dataStorage']) { Connector::setPostponeStorage($this->options['dataStorage']); } $connector = Connector::getInstance(); } if ($this->options['registerHelper'] && !Helper::isRegistered()) { Helper::register(); } if ($this->options['enabled'] && $connector->isActiveClient()) { if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) { $handler = VendorPhpConsoleHandler::getInstance(); $handler->setHandleErrors($this->options['useOwnErrorsHandler']); $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']); $handler->start(); } if ($this->options['sourcesBasePath']) { $connector->setSourcesBasePath($this->options['sourcesBasePath']); } if ($this->options['serverEncoding']) { $connector->setServerEncoding($this->options['serverEncoding']); } if ($this->options['password']) { $connector->setPassword($this->options['password']); } if ($this->options['enableSslOnlyMode']) { $connector->enableSslOnlyMode(); } if ($this->options['ipMasks']) { $connector->setAllowedIpMasks($this->options['ipMasks']); } if ($this->options['headersLimit']) { $connector->setHeadersLimit($this->options['headersLimit']); } if ($this->options['detectDumpTraceAndSource']) { $connector->getDebugDispatcher()->detectTraceAndSource = true; } $dumper = $connector->getDumper(); $dumper->levelLimit = $this->options['dumperLevelLimit']; $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit']; $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit']; $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit']; $dumper->detectCallbacks = $this->options['dumperDetectCallbacks']; if ($this->options['enableEvalListener']) { $connector->startEvalRequestsListener(); } } return $connector; }
protected function initSession() { $cacheDir = $this->console->getContainer()->get('kernel')->getCacheDir(); $file = $cacheDir . '/vitre_php_console.data'; Connector::setPostponeStorage(new \PhpConsole\Storage\File($file)); }
protected function initPhpConsole() { if (!$this->dataStorage) { $this->dataStorage = new PhpConsole\Storage\File(storage_path('php-console.dat'), true); } if ($this->dataStorage instanceof \PhpConsole\Storage\Session) { throw new \Exception('Unable to use PhpConsole\\Storage\\Session as PhpConsole storage interface because of problems with overridden $_SESSION handler in Laravel'); } Connector::setPostponeStorage($this->dataStorage); $connector = Connector::getInstance(); if ($this->registerHelper) { Helper::register(); } $isActiveClient = $connector->isActiveClient(); if (!$this->isEnabled || !$isActiveClient) { if ($isActiveClient) { $connector->disable(); } return; } $handler = Handler::getInstance(); $handler->setHandleErrors($this->handleErrors); $handler->setHandleErrors($this->handleExceptions); $handler->start(); if ($this->sourcesBasePath) { $connector->setSourcesBasePath($this->sourcesBasePath); } if ($this->serverEncoding) { $connector->setServerEncoding($this->serverEncoding); } if ($this->password) { $connector->setPassword($this->password); } if ($this->enableSslOnlyMode) { $connector->enableSslOnlyMode(); } if ($this->ipMasks) { $connector->setAllowedIpMasks($this->ipMasks); } if ($this->headersLimit) { $connector->setHeadersLimit($this->headersLimit); } if ($this->detectDumpTraceAndSource) { $connector->getDebugDispatcher()->detectTraceAndSource = true; } $dumper = $connector->getDumper(); $dumper->levelLimit = $this->dumperLevelLimit; $dumper->itemsCountLimit = $this->dumperItemsCountLimit; $dumper->itemSizeLimit = $this->dumperItemSizeLimit; $dumper->dumpSizeLimit = $this->dumperDumpSizeLimit; $dumper->detectCallbacks = $this->dumperDetectCallbacks; if ($this->isEvalEnabled) { $connector->startEvalRequestsListener(); } }
protected function initPostponeStorage(Storage $storage = null) { if ($storage instanceof \PhpConsole\Storage\Session) { throw new \Exception('Unable to use PhpConsole\\Storage\\Session as PhpConsole storage interface because of problems with overridden $_SESSION handler in Silex'); } Connector::setPostponeStorage($storage); }