function eZFatalError() { eZDebug::setHandleType(eZDebug::HANDLE_NONE); eZWebDAVContentBackend::appendLogEntry("****************************************"); eZWebDAVContentBackend::appendLogEntry("Fatal error: eZ Publish did not finish its request"); eZWebDAVContentBackend::appendLogEntry("The execution of eZ Publish was abruptly ended, the debug output is present below."); eZWebDAVContentBackend::appendLogEntry("****************************************"); // $templateResult = null; // eZDisplayResult( $templateResult ); }
public function __construct(array $settings = array()) { $this->settings = $settings + array('use-cache-headers' => true, 'max-age' => 86400, 'siteaccess' => null, 'use-exceptions' => false); unset($settings); require_once __DIR__ . '/treemenu_functions.php'; $this->setUseExceptions($this->settings['use-exceptions']); header('X-Powered-By: ' . eZPublishSDK::EDITION . ' (index_treemenu)'); if ($this->settings['use-cache-headers'] === true) { define('MAX_AGE', $this->settings['max-age']); if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { header($_SERVER['SERVER_PROTOCOL'] . ' 304 Not Modified'); header('Expires: ' . gmdate('D, d M Y H:i:s', time() + MAX_AGE) . ' GMT'); header('Cache-Control: max-age=' . MAX_AGE); header('Last-Modified: ' . gmdate('D, d M Y H:i:s', strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) . ' GMT'); header('Pragma: '); exit; } } // Tweaks ini filetime checks if not defined! // This makes ini system not check modified time so // that index_treemenu.php can assume that index.php does // this regular enough, set in config.php to override. if (!defined('EZP_INI_FILEMTIME_CHECK')) { define('EZP_INI_FILEMTIME_CHECK', false); } eZExecution::addFatalErrorHandler(function () { header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); }); eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP); // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs): $_SERVER['SCRIPT_FILENAME'] = str_replace('/index_treemenu.php', '/index.php', $_SERVER['SCRIPT_FILENAME']); $_SERVER['PHP_SELF'] = str_replace('/index_treemenu.php', '/index.php', $_SERVER['PHP_SELF']); $ini = eZINI::instance(); $timezone = $ini->variable('TimeZoneSettings', 'TimeZone'); if ($timezone) { putenv("TZ={$timezone}"); } // init uri code $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI'); eZSys::init('index.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') === 'true'); $this->uri = eZURI::instance(eZSys::requestURI()); $GLOBALS['eZRequestedURI'] = $this->uri; // Check for extension eZExtension::activateExtensions('default'); // load siteaccess // Use injected siteaccess if available or match it internally. $this->access = isset($this->settings['siteaccess']) ? $this->settings['siteaccess'] : eZSiteAccess::match($this->uri, eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile()); eZSiteAccess::change($this->access); // Check for new extension loaded by siteaccess eZExtension::activateExtensions('access'); }
header( $_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error' ); } function exitWithInternalError() { header( $_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error' ); eZExecution::cleanup(); eZExecution::setCleanExit(); } ignore_user_abort( true ); ob_start(); error_reporting ( E_ALL ); eZExecution::addFatalErrorHandler( 'eZFatalError' ); eZDebug::setHandleType( eZDebug::HANDLE_FROM_PHP ); // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs): $_SERVER['SCRIPT_FILENAME'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['SCRIPT_FILENAME'] ); $_SERVER['PHP_SELF'] = str_replace( '/index_treemenu.php', '/index.php', $_SERVER['PHP_SELF'] ); $ini = eZINI::instance(); $timezone = $ini->variable( 'TimeZoneSettings', 'TimeZone' ); if ( $timezone ) { putenv( "TZ=$timezone" ); } // init uri code $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable( 'REQUEST_URI' ); eZSys::init( 'index.php', $ini->variable( 'SiteAccessSettings', 'ForceVirtualHost' ) === 'true' );
function connect($server, $db, $user, $password, $socketPath, $charset = null, $port = false) { $connection = false; if ($socketPath !== false) { ini_set("mysqli.default_socket", $socketPath); } if ($this->UsePersistentConnection == true) { // Only supported on PHP 5.3 (mysqlnd) if (version_compare(PHP_VERSION, '5.3') > 0) { $this->Server = 'p:' . $this->Server; } else { eZDebug::writeWarning('mysqli only supports persistent connections when using php 5.3 and higher', __METHOD__); } } $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); eZPerfLogger::accumulatorStart('mysqli_connection', 'mysqli_total', 'Database connection'); try { $connection = mysqli_connect($server, $user, $password, null, (int) $port, $socketPath); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('mysqli_connection'); eZDebug::setHandleType($oldHandling); $maxAttempts = $this->connectRetryCount(); $waitTime = $this->connectRetryWaitTime(); $numAttempts = 1; while (!$connection && $numAttempts <= $maxAttempts) { sleep($waitTime); $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); eZPerfLogger::accumulatorStart('mysqli_connection', 'mysqli_total', 'Database connection'); try { $connection = mysqli_connect($this->Server, $this->User, $this->Password, null, (int) $this->Port, $this->SocketPath); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('mysqli_connection'); eZDebug::setHandleType($oldHandling); $numAttempts++; } $this->setError(); $this->IsConnected = true; if (!$connection) { eZDebug::writeError("Connection error: Couldn't connect to database server. Please try again later or inform the system administrator.\n{$this->ErrorMessage}", __CLASS__); $this->IsConnected = false; throw new eZDBNoConnectionException($server, $this->ErrorMessage, $this->ErrorNumber); } if ($this->IsConnected && $db != null) { eZPerfLogger::accumulatorStart('mysqli_selectdb', 'mysqli_total', 'Database selection'); $ret = mysqli_select_db($connection, $db); eZPerfLogger::accumulatorStop('mysqli_selectdb'); if (!$ret) { $this->setError($connection); eZDebug::writeError("Connection error: Couldn't select the database. Please try again later or inform the system administrator.\n{$this->ErrorMessage}", __CLASS__); $this->IsConnected = false; } } if ($charset !== null) { $originalCharset = $charset; $charset = eZCharsetInfo::realCharsetCode($charset); } if ($this->IsConnected and $charset !== null) { eZPerfLogger::accumulatorStart('mysqli_setcharset', 'mysqli_total', 'Charset selection'); $status = mysqli_set_charset($connection, eZMySQLCharset::mapTo($charset)); eZPerfLogger::accumulatorStop('mysqli_setcharset'); if (!$status) { $this->setError(); eZDebug::writeWarning("Connection warning: " . mysqli_errno($connection) . ": " . mysqli_error($connection), "eZMySQLiDB"); } } return $connection; }
static function updateSettings($settings) { // Make sure errors are handled by PHP when we read, including our own debug output. $oldHandleType = eZDebug::setHandleType(self::HANDLE_TO_PHP); if (isset($settings['debug-log-files-enabled'])) { $GLOBALS['eZDebugLogFileEnabled'] = $settings['debug-log-files-enabled']; if (isset($GLOBALS["eZDebugGlobalInstance"])) { $GLOBALS["eZDebugGlobalInstance"]->GlobalLogFileEnabled = $settings['debug-log-files-enabled']; } } if (isset($settings['debug-styles'])) { $GLOBALS['eZDebugStyles'] = $settings['debug-styles']; } if (isset($settings['always-log']) and is_array($settings['always-log'])) { $GLOBALS['eZDebugAlwaysLog'] = $settings['always-log']; } if (isset($settings['log-only'])) { $GLOBALS['eZDebugLogOnly'] = $settings['log-only'] == 'enabled'; } $GLOBALS['eZDebugAllowedByIP'] = isset($settings['debug-by-ip']) && $settings['debug-by-ip'] ? self::isAllowedByCurrentIP($settings['debug-ip-list']) : true; // updateSettings is meant to be called before the user session is started // so we do not take debug-by-user into account yet, but store the debug-user-list in $GLOBALS // so it can be used in the final check, done by checkDebugByUser() if (isset($settings['debug-by-user']) && $settings['debug-by-user']) { $GLOBALS['eZDebugUserIDList'] = $settings['debug-user-list'] ? $settings['debug-user-list'] : array(); } $GLOBALS['eZDebugAllowed'] = $GLOBALS['eZDebugAllowedByIP']; $GLOBALS['eZDebugEnabled'] = $settings['debug-enabled'] && $GLOBALS['eZDebugAllowedByIP']; eZDebug::setHandleType($oldHandleType); }
function query($sql, $server = false) { if ($this->isConnected()) { eZDebug::accumulatorStart('postgresql_query', 'postgresql_total', 'Postgresql queries'); if ($this->OutputSQL) { $this->startTimer(); } // postgres will by default cast an error if a query fails // exception handling mode needs to catch this exception and set the $result variable to false if ($this->errorHandling == eZDB::ERROR_HANDLING_EXCEPTIONS) { $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); try { $result = pg_query($this->DBConnection, $sql); } catch (ErrorException $e) { $result = false; } eZDebug::setHandleType($oldHandling); } else { $result = pg_query($this->DBConnection, $sql); } if ($this->OutputSQL) { $this->endTimer(); if ($this->timeTaken() > $this->SlowSQLTimeout) { $this->reportQuery('eZPostgreSQLDB', $sql, false, $this->timeTaken()); } } eZDebug::accumulatorStop('postgresql_query'); if (!$result) { $this->setError(); eZDebug::writeError("Error: error executing query: {$sql}: {$this->ErrorMessage}", "eZPostgreSQLDB"); if ($this->errorHandling == eZDB::ERROR_HANDLING_EXCEPTIONS) { throw new eZDBException($this->ErrorMessage, $this->ErrorNumber); } $this->reportError(); } } else { $result = false; } return $result; }
/** * @param array $settings * @param null $responseWriterClass Name of the ezpRestHttpResponseWriter implementation to use during request */ public function __construct(array $settings = array(), $responseWriterClass = null) { $this->responseWriterClass = $responseWriterClass; if (isset($settings['injected-settings'])) { $injectedSettings = array(); foreach ($settings['injected-settings'] as $keySetting => $injectedSetting) { list($file, $section, $setting) = explode('/', $keySetting); $injectedSettings[$file][$section][$setting] = $injectedSetting; } // Those settings override anything else in local .ini files and their overrides eZINI::injectSettings($injectedSettings); } if (isset($settings['injected-merge-settings'])) { $injectedSettings = array(); foreach ($settings['injected-merge-settings'] as $keySetting => $injectedSetting) { list($file, $section, $setting) = explode('/', $keySetting); $injectedSettings[$file][$section][$setting] = $injectedSetting; } // Those settings override anything else in local .ini files and their overrides eZINI::injectMergeSettings($injectedSettings); } $this->settings = $settings + array('use-cache-headers' => true, 'max-age' => 86400, 'siteaccess' => null, 'use-exceptions' => false); unset($settings, $injectedSettings, $file, $section, $setting, $keySetting, $injectedSetting); // lazy loaded database driver include __DIR__ . '/lazy.php'; $this->setUseExceptions($this->settings['use-exceptions']); // Tweaks ini filetime checks if not defined! // This makes ini system not check modified time so // that index_treemenu.php can assume that index.php does // this regular enough, set in config.php to override. if (!defined('EZP_INI_FILEMTIME_CHECK')) { define('EZP_INI_FILEMTIME_CHECK', false); } eZExecution::addFatalErrorHandler(function () { if (!headers_sent()) { header($_SERVER['SERVER_PROTOCOL'] . ' 500 Internal Server Error'); } }); eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP); // Trick to get eZSys working with a script other than index.php (while index.php still used in generated URLs): $_SERVER['SCRIPT_FILENAME'] = str_replace('/index_rest.php', '/index.php', $_SERVER['SCRIPT_FILENAME']); $_SERVER['PHP_SELF'] = str_replace('/index_rest.php', '/index.php', $_SERVER['PHP_SELF']); $ini = eZINI::instance(); $timezone = $ini->variable('TimeZoneSettings', 'TimeZone'); if ($timezone) { putenv("TZ={$timezone}"); } eZDebug::setHandleType(eZDebug::HANDLE_NONE); $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI'); $ini = eZINI::instance(); eZSys::init('index_rest.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') == 'true'); $uri = eZURI::instance(eZSys::requestURI()); $GLOBALS['eZRequestedURI'] = $uri; // load extensions eZExtension::activateExtensions('default'); require_once __DIR__ . '/restkernel_functions.php'; // set siteaccess from X-Siteaccess header if given and exists if (isset($_SERVER['HTTP_X_SITEACCESS']) && eZSiteAccess::exists($_SERVER['HTTP_X_SITEACCESS'])) { $access = array('name' => $_SERVER['HTTP_X_SITEACCESS'], 'type' => eZSiteAccess::TYPE_STATIC); } else { $access = eZSiteAccess::match($uri, eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile()); } eZSiteAccess::change($access); // load siteaccess extensions eZExtension::activateExtensions('access'); // Now that all extensions are activated and siteaccess has been changed, reset // all eZINI instances as they may not take into account siteaccess specific settings. eZINI::resetAllInstances(false); if (ezpRestDebug::isDebugEnabled()) { $debug = ezpRestDebug::getInstance(); $debug->updateDebugSettings(); } }
function connect( $server, $db, $user, $password, $socketPath, $charset = null, $port = false ) { // if a port is specified, we add it to $server, this is how mysql_(p)connect accepts a port number if ( $port ) { $server .= ':' . $port; } $connection = false; if ( $socketPath !== false ) { ini_set( "mysql.default_socket", $socketPath ); } $oldHandling = eZDebug::setHandleType( eZDebug::HANDLE_EXCEPTION ); try { if ( $this->UsePersistentConnection == true ) { $connection = mysql_pconnect( $server, $user, $password ); } else { $connection = mysql_connect( $server, $user, $password, true ); } } catch( ErrorException $e ) {} eZDebug::setHandleType( $oldHandling ); $this->setError(); $maxAttempts = $this->connectRetryCount(); $waitTime = $this->connectRetryWaitTime(); $numAttempts = 1; while ( !$connection && $numAttempts <= $maxAttempts ) { sleep( $waitTime ); $oldHandling = eZDebug::setHandleType( eZDebug::HANDLE_EXCEPTION ); eZDebug::accumulatorStart( 'mysql_connection', 'mysql_total', 'Database connection' ); try { if ( $this->UsePersistentConnection == true ) { $connection = mysql_pconnect( $this->Server, $this->User, $this->Password ); } else { $connection = mysql_connect( $this->Server, $this->User, $this->Password ); } } catch( ErrorException $e ) {} eZDebug::accumulatorStop( 'mysql_connection' ); eZDebug::setHandleType( $oldHandling ); $numAttempts++; } $this->setError(); $this->IsConnected = true; if ( !$connection ) { eZDebug::writeError( "Connection error: Couldn't connect to database server. Please try again later or inform the system administrator.\n{$this->ErrorMessage}", __CLASS__ ); $this->IsConnected = false; throw new eZDBNoConnectionException( $server, $this->ErrorMessage, $this->ErrorNumber ); } if ( $this->IsConnected && $db != null ) { $ret = mysql_select_db( $db, $connection ); if ( !$ret ) { $this->setError( $connection ); eZDebug::writeError( "Connection error: Couldn't select the database. Please try again later or inform the system administrator.\n{$this->ErrorMessage}", __CLASS__ ); $this->IsConnected = false; } } if ( $charset !== null ) { $charset = eZCharsetInfo::realCharsetCode( $charset ); } if ( $this->IsConnected and $charset !== null and $this->isCharsetSupported( $charset ) ) { $query = "SET NAMES '" . eZMySQLCharset::mapTo( $charset ) . "'"; $status = mysql_query( $query, $connection ); $this->reportQuery( 'eZMySQLDB', $query, false, false, true ); if ( !$status ) { $this->setError(); eZDebug::writeWarning( "Connection warning: " . mysql_errno( $connection ) . ": " . mysql_error( $connection ), "eZMySQLDB" ); } } return $connection; }
<?php /** * File containing the rest bootstrap * * @copyright Copyright (C) eZ Systems AS. All rights reserved. * @license For full copyright and license information view LICENSE file distributed with this source code. * @version //autogentag// * @package kernel */ require __DIR__ . '/autoload.php'; require __DIR__ . '/kernel/private/rest/classes/lazy.php'; // Below we are setting up a minimal eZ Publish environment from the old index.php // This is a temporary measure. // We want PHP to deal with all errors here. eZDebug::setHandleType(eZDebug::HANDLE_TO_PHP); $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI'); $ini = eZINI::instance(); eZSys::init('index_rest.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') == 'true'); $uri = eZURI::instance(eZSys::requestURI()); $GLOBALS['eZRequestedURI'] = $uri; // load extensions eZExtension::activateExtensions('default'); // setup for eZSiteAccess:change() needs some methods defined in old index.php // We disable it, since we dont' want any override settings to change the // debug settings here function eZUpdateDebugSettings() { } // load siteaccess $access = eZSiteAccess::match($uri, eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile());
/** * This is called whenever an error occurs in one of the database handlers. * * If a transaction is active it will be invalidated as well. * * @access protected * @throws eZDBException */ function reportError() { // If we have a running transaction we must mark as invalid // in which case a call to commit() will perform a rollback if ($this->TransactionCounter > 0) { $this->invalidateTransaction(); // This is the unique ID for this incidence which will also be placed in the error logs. $transID = 'TRANSID-' . md5(time() . mt_rand()); eZDebug::writeError('Transaction in progress failed due to DB error, transaction was rollbacked. Transaction ID is ' . $transID . '.', 'eZDBInterface::commit ' . $transID); $this->rollback(); if ($this->errorHandling == eZDB::ERROR_HANDLING_EXCEPTIONS) { throw new eZDBException($this->ErrorMessage, $this->ErrorNumber); } else { // Stop execution immediately while allowing other systems (session etc.) to cleanup eZExecution::cleanup(); eZExecution::setCleanExit(); // Give some feedback, and also possibly show the debug output eZDebug::setHandleType(eZDebug::HANDLE_NONE); $ini = eZINI::instance(); $adminEmail = $ini->variable('MailSettings', 'AdminEmail'); if (!eZSys::isShellExecution()) { if (!headers_sent()) { header("HTTP/1.1 500 Internal Server Error"); } $site = eZSys::serverVariable('HTTP_HOST'); $uri = eZSys::serverVariable('REQUEST_URI'); print "<div class=\"fatal-error\" style=\""; print 'margin: 0.5em 0 1em 0; ' . 'padding: 0.25em 1em 0.75em 1em;' . 'border: 4px solid #000000;' . 'background-color: #f8f8f4;' . 'border-color: #f95038;" >'; print "<b>Fatal error</b>: A database transaction in eZ Publish failed.<br/>"; print "<p>"; print "The current execution was stopped to prevent further problems.<br/>\n" . "You should contact the <a href=\"mailto:{$adminEmail}?subject=Transaction failed on {$site} and URI {$uri} with ID {$transID}\">System Administrator</a> of this site with the information on this page.<br/>\n" . "The current transaction ID is <b>{$transID}</b> and has been logged.<br/>\n" . "Please include the transaction ID and the current URL when contacting the system administrator.<br/>\n"; print "</p>"; print "</div>"; $templateResult = null; if (function_exists('eZDisplayResult')) { eZDisplayResult($templateResult); } } else { fputs(STDERR, "Fatal error: A database transaction in eZ Publish failed.\n"); fputs(STDERR, "\n"); fputs(STDERR, "The current execution was stopped to prevent further problems.\n" . "You should contact the System Administrator ({$adminEmail}) of this site.\n" . "The current transaction ID is {$transID} and has been logged.\n" . "Please include the transaction ID and the name of the current script when contacting the system administrator.\n"); fputs(STDERR, "\n"); fputs(STDERR, eZDebug::printReport(false, false, true)); } // PHP execution stops here exit(1); } } }
function initialize() { if (ob_get_length() != 0) { ob_end_clean(); } $debugINI = eZINI::instance('debug.ini'); eZDebugSetting::setDebugINI($debugINI); // Initialize text codec settings $this->updateTextCodecSettings(); // Initialize debug settings $this->updateDebugSettings($this->UseDebugOutput); // Set the different permissions/settings. $ini = eZINI::instance(); $iniFilePermission = $ini->variable('FileSettings', 'StorageFilePermissions'); $iniDirPermission = $ini->variable('FileSettings', 'StorageDirPermissions'); $iniVarDirectory = eZSys::cacheDirectory(); eZCodePage::setPermissionSetting(array('file_permission' => octdec($iniFilePermission), 'dir_permission' => octdec($iniDirPermission), 'var_directory' => $iniVarDirectory)); eZExecution::addCleanupHandler('eZDBCleanup'); eZExecution::addFatalErrorHandler('eZFatalError'); eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP); if ($this->UseExtensions) { // Check for extension eZExtension::activateExtensions('default'); // Extension check end } else { if (!$this->isQuiet()) { $cli = eZCLI::instance(); $cli->output("Notice: This script uses 'use-extensions' => false, meaning extension settings are not loaded!"); } } $siteaccess = $this->SiteAccess; if ($siteaccess) { $access = array('name' => $siteaccess, 'type' => eZSiteAccess::TYPE_STATIC); } else { $ini = eZINI::instance(); $siteaccess = $ini->variable('SiteSettings', 'DefaultAccess'); $access = array('name' => $siteaccess, 'type' => eZSiteAccess::TYPE_DEFAULT); } $access = eZSiteAccess::change($access); if ($this->UseExtensions) { // Check for siteaccess extension eZExtension::activateExtensions('access'); // Extension check end } // Now that all extensions are activated and siteaccess has been changed, reset // all eZINI instances as they may not take into account siteaccess specific settings. eZINI::resetAllInstances(false); // Set the global setting which is read by the session lib $GLOBALS['eZSiteBasics']['session-required'] = $this->UseSession; if ($this->UseSession) { $db = eZDB::instance(); if ($db->isConnected()) { eZSession::start(); } else { $this->setIsInitialized(false); $this->InitializationErrorMessage = 'database error: ' . $db->errorMessage(); return; } } if ($this->User) { $userLogin = $this->User['login']; $userPassword = $this->User['password']; if ($userLogin and $userPassword) { $userID = eZUser::loginUser($userLogin, $userPassword); if (!$userID) { $cli = eZCLI::instance(); if ($this->isLoud()) { $cli->warning('Failed to login with user ' . $userLogin); } eZExecution::cleanup(); eZExecution::setCleanExit(); } } } // Initialize module handling if ($this->UseModules) { $moduleRepositories = eZModule::activeModuleRepositories($this->UseExtensions); eZModule::setGlobalPathList($moduleRepositories); } $this->setIsInitialized(true); }
/** * Constructs an ezpKernel instance */ public function __construct(array $settings = array()) { $this->settings = $settings + array('siteaccess' => null, 'use-exceptions' => false, 'session' => null); unset($settings); require_once __DIR__ . '/global_functions.php'; $this->setUseExceptions($this->settings['use-exceptions']); $GLOBALS['eZSiteBasics'] = array('external-css' => true, 'show-page-layout' => true, 'module-run-required' => true, 'policy-check-required' => true, 'policy-check-omit-list' => array(), 'url-translator-allowed' => true, 'validity-check-required' => false, 'user-object-required' => true, 'session-required' => true, 'db-required' => false, 'no-cache-adviced' => false, 'site-design-override' => false, 'module-repositories' => array()); $this->siteBasics =& $GLOBALS['eZSiteBasics']; // Reads settings from i18n.ini and passes them to eZTextCodec. list($i18nSettings['internal-charset'], $i18nSettings['http-charset'], $i18nSettings['mbstring-extension']) = eZINI::instance('i18n.ini')->variableMulti('CharacterSettings', array('Charset', 'HTTPCharset', 'MBStringExtension'), array(false, false, 'enabled')); eZTextCodec::updateSettings($i18nSettings); // @todo Change so code only supports utf-8 in 5.0? // Initialize debug settings. eZUpdateDebugSettings(); // Set the different permissions/settings. $ini = eZINI::instance(); // Set correct site timezone $timezone = $ini->variable("TimeZoneSettings", "TimeZone"); if ($timezone) { date_default_timezone_set($timezone); } list($iniFilePermission, $iniDirPermission) = $ini->variableMulti('FileSettings', array('StorageFilePermissions', 'StorageDirPermissions')); // OPTIMIZATION: // Sets permission array as global variable, this avoids the eZCodePage include $GLOBALS['EZCODEPAGEPERMISSIONS'] = array('file_permission' => octdec($iniFilePermission), 'dir_permission' => octdec($iniDirPermission), 'var_directory' => eZSys::cacheDirectory()); unset($i18nSettings, $timezone, $iniFilePermission, $iniDirPermission); eZExecution::addCleanupHandler(function () { if (class_exists('eZDB', false) && eZDB::hasInstance()) { eZDB::instance()->setIsSQLOutputEnabled(false); } }); eZExecution::addFatalErrorHandler(function () { header("HTTP/1.1 500 Internal Server Error"); echo "<b>Fatal error</b>: The web server did not finish its request<br/>"; if (ini_get('display_errors') == 1) { if (eZDebug::isDebugEnabled()) { echo "<p>The execution of eZ Publish was abruptly ended, the debug output is present below.</p>"; } else { echo "<p>Debug information can be found in the log files normally placed in var/log/* or by enabling 'DebugOutput' in site.ini</p>"; } } else { echo "<p>Contact website owner with current url and info on what you did, and owner will be able to debug the issue further (by enabling 'display_errors' in php.ini).</p>"; } eZDisplayResult(null); }); eZExecution::setCleanExit(); // Enable this line to get eZINI debug output // eZINI::setIsDebugEnabled( true ); // Enable this line to turn off ini caching // eZINI::setIsCacheEnabled( false); if ($ini->variable('RegionalSettings', 'Debug') === 'enabled') { eZLocale::setIsDebugEnabled(true); } eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP); $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI'); // Initialize basic settings, such as vhless dirs and separators eZSys::init('index.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') === 'true'); // Check for extension eZExtension::activateExtensions('default'); // Extension check end // Use injected siteaccess if available or match it internally. $this->access = isset($this->settings['siteaccess']) ? $this->settings['siteaccess'] : eZSiteAccess::match(eZURI::instance(eZSys::requestURI()), eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile()); eZSiteAccess::change($this->access); eZDebugSetting::writeDebug('kernel-siteaccess', $this->access, 'current siteaccess'); // Check for siteaccess extension eZExtension::activateExtensions('access'); // Siteaccess extension check end // Now that all extensions are activated and siteaccess has been changed, reset // all eZINI instances as they may not take into account siteaccess specific settings. eZINI::resetAllInstances(false); ezpEvent::getInstance()->registerEventListeners(); $this->mobileDeviceDetect = new ezpMobileDeviceDetect(ezpMobileDeviceDetectFilter::getFilter()); if ($this->mobileDeviceDetect->isEnabled()) { $this->mobileDeviceDetect->process(); if ($this->mobileDeviceDetect->isMobileDevice()) { $this->mobileDeviceDetect->redirect(); } } // eZSession::setSessionArray( $mainRequest->session ); /** * Check for activating Debug by user ID (Final checking. The first was in eZDebug::updateSettings()) * @uses eZUser::instance() So needs to be executed after eZSession::start()|lazyStart() */ eZDebug::checkDebugByUser(); }
static function updateSettings($settings) { // Make sure errors are handled by PHP when we read, including our own debug output. $oldHandleType = eZDebug::setHandleType(self::HANDLE_TO_PHP); if (isset($settings['debug-log-files-enabled'])) { $GLOBALS['eZDebugLogFileEnabled'] = $settings['debug-log-files-enabled']; if (isset($GLOBALS["eZDebugGlobalInstance"])) { $GLOBALS["eZDebugGlobalInstance"]->GlobalLogFileEnabled = $settings['debug-log-files-enabled']; } } if (isset($settings['debug-styles'])) { $GLOBALS['eZDebugStyles'] = $settings['debug-styles']; } if (isset($settings['always-log']) and is_array($settings['always-log'])) { $GLOBALS['eZDebugAlwaysLog'] = $settings['always-log']; } if (isset($settings['log-only'])) { $GLOBALS['eZDebugLogOnly'] = $settings['log-only'] == 'enabled'; } $notDebugByIP = true; $debugEnabled = $settings['debug-enabled']; if ($settings['debug-enabled'] and $settings['debug-by-ip']) { $ipAddress = eZSys::serverVariable('REMOTE_ADDR', true); if ($ipAddress) { $debugEnabled = false; foreach ($settings['debug-ip-list'] as $itemToMatch) { if (preg_match("/^(([0-9]+)\\.([0-9]+)\\.([0-9]+)\\.([0-9]+))(\\/([0-9]+)\$|\$)/", $itemToMatch, $matches)) { if ($matches[6]) { if (eZDebug::isIPInNet($ipAddress, $matches[1], $matches[7])) { $debugEnabled = true; $notDebugByIP = false; break; } } else { if ($matches[1] == $ipAddress) { $debugEnabled = true; $notDebugByIP = false; break; } } } } } else { $debugEnabled = in_array('commandline', $settings['debug-ip-list']) && php_sapi_name() == 'cli'; } } if ($settings['debug-enabled'] and isset($settings['debug-by-user']) and $settings['debug-by-user'] and $notDebugByIP) { $debugUserIDList = $settings['debug-user-list'] ? $settings['debug-user-list'] : array(); $GLOBALS['eZDebugUserIDList'] = $debugUserIDList; // We enable the debug temporarily. // In checkDebugByUser() will be last(final) check for debug by user id. $debugEnabled = true; } $GLOBALS['eZDebugEnabled'] = $debugEnabled; eZDebug::setHandleType($oldHandleType); }
/** * Constructs an ezpKernel instance */ public function __construct(array $settings = array()) { if (isset($settings['injected-settings'])) { $injectedSettings = array(); foreach ($settings['injected-settings'] as $keySetting => $injectedSetting) { list($file, $section, $setting) = explode('/', $keySetting); $injectedSettings[$file][$section][$setting] = $injectedSetting; } // Those settings override anything else in local .ini files and their overrides eZINI::injectSettings($injectedSettings); } if (isset($settings['injected-merge-settings'])) { $injectedSettings = array(); foreach ($settings['injected-merge-settings'] as $keySetting => $injectedSetting) { list($file, $section, $setting) = explode('/', $keySetting); $injectedSettings[$file][$section][$setting] = $injectedSetting; } // Those settings override anything else in local .ini files and their overrides eZINI::injectMergeSettings($injectedSettings); } $this->settings = $settings + array('siteaccess' => null, 'use-exceptions' => false, 'session' => null, 'service-container' => null); unset($settings, $injectedSettings, $file, $section, $setting, $keySetting, $injectedSetting); require_once __DIR__ . '/global_functions.php'; $this->setUseExceptions($this->settings['use-exceptions']); $GLOBALS['eZSiteBasics'] = array('external-css' => true, 'show-page-layout' => true, 'module-run-required' => true, 'policy-check-required' => true, 'policy-check-omit-list' => array(), 'url-translator-allowed' => true, 'validity-check-required' => false, 'user-object-required' => true, 'session-required' => true, 'db-required' => false, 'no-cache-adviced' => false, 'site-design-override' => false, 'module-repositories' => array()); $this->siteBasics =& $GLOBALS['eZSiteBasics']; // Reads settings from i18n.ini and passes them to eZTextCodec. list($i18nSettings['internal-charset'], $i18nSettings['http-charset'], $i18nSettings['mbstring-extension']) = eZINI::instance('i18n.ini')->variableMulti('CharacterSettings', array('Charset', 'HTTPCharset', 'MBStringExtension'), array(false, false, 'enabled')); eZTextCodec::updateSettings($i18nSettings); // @todo Change so code only supports utf-8 in 5.0? // Initialize debug settings. eZUpdateDebugSettings(); // Set the different permissions/settings. $ini = eZINI::instance(); // Set correct site timezone $timezone = $ini->variable("TimeZoneSettings", "TimeZone"); if ($timezone) { date_default_timezone_set($timezone); } list($iniFilePermission, $iniDirPermission) = $ini->variableMulti('FileSettings', array('StorageFilePermissions', 'StorageDirPermissions')); // OPTIMIZATION: // Sets permission array as global variable, this avoids the eZCodePage include $GLOBALS['EZCODEPAGEPERMISSIONS'] = array('file_permission' => octdec($iniFilePermission), 'dir_permission' => octdec($iniDirPermission), 'var_directory' => eZSys::cacheDirectory()); unset($i18nSettings, $timezone, $iniFilePermission, $iniDirPermission); eZExecution::addCleanupHandler(function () { if (class_exists('eZDB', false) && eZDB::hasInstance()) { eZDB::instance()->setIsSQLOutputEnabled(false); } }); // Sets up the FatalErrorHandler $this->setupFatalErrorHandler(); // Enable this line to get eZINI debug output // eZINI::setIsDebugEnabled( true ); // Enable this line to turn off ini caching // eZINI::setIsCacheEnabled( false); if ($ini->variable('RegionalSettings', 'Debug') === 'enabled') { eZLocale::setIsDebugEnabled(true); } eZDebug::setHandleType(eZDebug::HANDLE_FROM_PHP); $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable('REQUEST_URI'); // Initialize basic settings, such as vhless dirs and separators if ($this->hasServiceContainer() && $this->getServiceContainer()->has('request')) { eZSys::init(basename($this->getServiceContainer()->get('request')->server->get('SCRIPT_FILENAME')), $ini->variable('SiteAccessSettings', 'ForceVirtualHost') === 'true'); } else { eZSys::init('index.php', $ini->variable('SiteAccessSettings', 'ForceVirtualHost') === 'true'); } // Check for extension eZExtension::activateExtensions('default'); // Extension check end // Use injected siteaccess if available or match it internally. $this->access = isset($this->settings['siteaccess']) ? $this->settings['siteaccess'] : eZSiteAccess::match(eZURI::instance(eZSys::requestURI()), eZSys::hostname(), eZSys::serverPort(), eZSys::indexFile()); eZSiteAccess::change($this->access); eZDebugSetting::writeDebug('kernel-siteaccess', $this->access, 'current siteaccess'); // Check for siteaccess extension eZExtension::activateExtensions('access'); // Siteaccess extension check end // Now that all extensions are activated and siteaccess has been changed, reset // all eZINI instances as they may not take into account siteaccess specific settings. eZINI::resetAllInstances(false); ezpEvent::getInstance()->registerEventListeners(); $this->mobileDeviceDetect = new ezpMobileDeviceDetect(ezpMobileDeviceDetectFilter::getFilter()); // eZSession::setSessionArray( $mainRequest->session ); }
/** * File containing the rest bootstrap * * @copyright Copyright (C) eZ Systems AS. All rights reserved. * @license For full copyright and license information view LICENSE file distributed with this source code. * @version //autogentag// * @package kernel */ require __DIR__ . '/autoload.php'; require __DIR__ . '/kernel/private/rest/classes/lazy.php'; // Below we are setting up a minimal eZ Publish environment from the old index.php // This is a temporary measure. eZDebug::setHandleType( eZDebug::HANDLE_NONE ); $GLOBALS['eZGlobalRequestURI'] = eZSys::serverVariable( 'REQUEST_URI' ); $ini = eZINI::instance(); eZSys::init( 'index_rest.php', $ini->variable( 'SiteAccessSettings', 'ForceVirtualHost' ) == 'true' ); $uri = eZURI::instance( eZSys::requestURI() ); $GLOBALS['eZRequestedURI'] = $uri; // load extensions eZExtension::activateExtensions( 'default' ); // setup for eZSiteAccess:change() needs some functions defined in old index.php function eZUpdateDebugSettings() { $ini = eZINI::instance(); $debugSettings = array( 'debug-enabled' => false ); $logList = $ini->variable( 'DebugSettings', 'AlwaysLog' );
/** * Creates a new eZOracleDB object and connects to the database. */ function eZOracleTracing50DB($parameters) { $this->eZDBInterface($parameters); if (!extension_loaded('oci8')) { if (function_exists('eZAppendWarningItem')) { eZAppendWarningItem(array('error' => array('type' => 'ezdb', 'number' => eZDBInterface::ERROR_MISSING_EXTENSION), 'text' => 'Oracle extension was not found, the DB handler will not be initialized.')); $this->IsConnected = false; } eZDebug::writeWarning('Oracle extension was not found, the DB handler will not be initialized.', 'eZOracleDB'); return; } //$server = $this->Server; $user = $this->User; $password = $this->Password; $db = $this->DB; $this->ErrorMessage = false; $this->ErrorNumber = false; $this->IgnoreTriggerErrors = false; $ini = eZINI::instance(); if (function_exists("oci_connect")) { $this->Mode = OCI_COMMIT_ON_SUCCESS; // translate chosen charset to its Oracle analogue $oraCharset = null; if (isset($this->Charset) && $this->Charset !== '') { if (array_key_exists($this->Charset, $this->CharsetsMap)) { $oraCharset = $this->CharsetsMap[$this->Charset]; } } $maxAttempts = $this->connectRetryCount(); $waitTime = $this->connectRetryWaitTime(); $numAttempts = 1; if ($ini->variable("DatabaseSettings", "UsePersistentConnection") == "enabled") { eZDebugSetting::writeDebug('kernel-db-oracle', $ini->variable("DatabaseSettings", "UsePersistentConnection"), "using persistent connection"); eZPerfLogger::accumulatorStart('oracle_connection', 'oracle_total', 'Database connection'); $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); try { $this->DBConnection = oci_pconnect($user, $password, $db, $oraCharset); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('oracle_connection'); eZDebug::setHandleType($oldHandling); while ($this->DBConnection == false and $numAttempts <= $maxAttempts) { sleep($waitTime); eZPerfLogger::accumulatorStart('oracle_connection', 'oracle_total', 'Database connection'); $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); try { $this->DBConnection = oci_pconnect($user, $password, $db, $oraCharset); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('oracle_connection'); eZDebug::setHandleType($oldHandling); $numAttempts++; } } else { eZDebugSetting::writeDebug('kernel-db-oracle', "using real connection", "using real connection"); $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); eZPerfLogger::accumulatorStart('oracle_connection', 'oracle_total', 'Database connection'); try { $this->DBConnection = oci_connect($user, $password, $db, $oraCharset); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('oracle_connection'); eZDebug::setHandleType($oldHandling); while ($this->DBConnection == false and $numAttempts <= $maxAttempts) { sleep($waitTime); $oldHandling = eZDebug::setHandleType(eZDebug::HANDLE_EXCEPTION); eZPerfLogger::accumulatorStart('oracle_connection', 'oracle_total', 'Database connection'); try { $this->DBConnection = @oci_connect($user, $password, $db, $oraCharset); } catch (ErrorException $e) { } eZPerfLogger::accumulatorStop('oracle_connection'); eZDebug::setHandleType($oldHandling); $numAttempts++; } } // OCIInternalDebug(1); if ($this->DBConnection === false) { $this->IsConnected = false; } else { $this->IsConnected = true; // make sure the decimal separator is the dot $this->query("ALTER SESSION SET NLS_NUMERIC_CHARACTERS='. '"); } if ($this->DBConnection === false) { $error = oci_error(); // workaround for bug in PHP oci8 extension if ($error === false && !getenv("ORACLE_HOME")) { $error = array('code' => -1, 'message' => 'ORACLE_HOME environment variable is not set'); } if ($error['code'] != 0) { if ($error['code'] == 12541) { $error['message'] = 'No listener (probably the server is down).'; } $this->ErrorMessage = $error['message']; $this->ErrorNumber = $error['code']; eZDebug::writeError("Connection error(" . $error["code"] . "):\n" . $error["message"] . " ", "eZOracleDB"); } throw new eZDBNoConnectionException($db, $this->ErrorMessage, $this->ErrorNumber); } } else { $this->ErrorMessage = "Oracle support not compiled in PHP"; $this->ErrorNumber = -1; eZDebug::writeError($this->ErrorMessage, "eZOracleDB"); $this->IsConnected = false; } eZDebug::createAccumulatorGroup('oracle_total', 'Oracle Total'); }