public function getBasePath() { $path = parent::getBasePath(); if (empty($path)) { $path = '/'; } else { $path = str_replace('\\', '/', $path); } return $path; }
/** * Canonicalizes the request URL based on the given link URL. Canonicalization will * only happen when requesting an HTML page, as it is primarily an SEO benefit. * * A response exception will be thrown is redirection is required. * * @param string $linkUrl */ public function canonicalizeRequestUrl($linkUrl) { if ($this->getResponseType() != 'html') { return; } if (!$this->_request->isGet()) { return; } $linkUrl = strval($linkUrl); if (strlen($linkUrl) == 0) { return; } if ($linkUrl[0] == '.') { $linkUrl = substr($linkUrl, 1); } $basePath = $this->_request->getBasePath(); $requestUri = $this->_request->getRequestUri(); if (substr($requestUri, 0, strlen($basePath)) != $basePath) { return; } $routeBase = substr($requestUri, strlen($basePath)); if (isset($routeBase[0]) && $routeBase[0] === '/') { $routeBase = substr($routeBase, 1); } if (preg_match('#^([^?]*\\?[^=&]*)(&(.*))?$#U', $routeBase, $match)) { $requestUrlPrefix = $match[1]; $requestParams = isset($match[3]) ? $match[3] : false; } else { $parts = explode('?', $routeBase); $requestUrlPrefix = $parts[0]; $requestParams = isset($parts[1]) ? $parts[1] : false; } if (preg_match('#^([^?]*\\?[^=&]*)(&(.*))?$#U', $linkUrl, $match)) { $linkUrlPrefix = $match[1]; //$linkParams = isset($match[3]) ? $match[3] : false; } else { $parts = explode('?', $linkUrl); $linkUrlPrefix = $parts[0]; //$linkParams = isset($parts[1]) ? $parts[1]: false; } if (urldecode($requestUrlPrefix) != urldecode($linkUrlPrefix)) { $redirectUrl = $linkUrlPrefix; if ($requestParams !== false) { $redirectUrl .= (strpos($redirectUrl, '?') === false ? '?' : '&') . $requestParams; } throw $this->responseException($this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CANONICAL_PERMANENT, $redirectUrl)); } }
public function _initView() { // init view $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); if (null == $viewRenderer->view) { $viewRenderer->initView(); } $view = $viewRenderer->view; if (is_object($view)) { $view->doctype('XHTML1_STRICT'); // set application charset $view->charset = 'UTF-8'; // build the root url $request = new Zend_Controller_Request_Http(); $siteUrl = $request->getScheme() . '://' . $request->getHttpHost(); $view->host = $siteUrl; $basePath = $request->getBasePath(); $siteUrl = $basePath == '' ? $siteUrl : $siteUrl . '/' . ltrim($basePath, '/'); $view->baseUrl = $siteUrl; $siteUrl = $siteUrl . '/index.php'; $view->rootUrl = $siteUrl; } }
/** * Getting the code reference and the calendar image. Configure calendar. * * @return string */ private function _getCalendarLink() { $request = new Zend_Controller_Request_Http(); $basePath = $request->getBasePath(); $locale = Default_Plugin_SysBox::getTranslateLocale(); $dateFormat = $locale == 'en' ? '%m.%d.%Y' : '%d.%m.%Y'; //-------------------------- $calendarLink = ' <a href="#" id="' . $this->getElement()->getName() . '_calendar">' . '<img class="calendar-image" src = "' . Default_Plugin_SysBox::getUrlRes('/js/calendar/calendar.gif') . '"> </a> <script type="text/javascript"> Calendar.setup( { inputField : "' . $this->getElement()->getName() . '", ifFormat : "' . $dateFormat . '", button : "' . $this->getElement()->getName() . '_calendar", firstDay : 1 } ); </script> '; return $calendarLink; }
public function testBasePathAutoDiscoveryWithPhpFile() { $_SERVER['REQUEST_URI'] = '/dir/action'; $_SERVER['PHP_SELF'] = '/dir/index.php'; $_SERVER['SCRIPT_FILENAME'] = '/var/web/dir/index.php'; $request = new Zend_Controller_Request_Http(); $this->assertEquals('/dir', $request->getBasePath(), $request->getBaseUrl()); }
/** * Get the base URL path * ex. /zf-myblog/public * * @return string */ static function getBaseURL() { $request = new Zend_Controller_Request_Http(); $basePath = $request->getBasePath(); //$request->getHttpHost() return $basePath; }
/** * Gets the request paths from the specified request object. * * @param Zend_Controller_Request_Http $request * * @return array Keys: basePath, host, protocol, fullBasePath, requestUri */ public static function getRequestPaths(Zend_Controller_Request_Http $request) { $basePath = $request->getBasePath(); if ($basePath === '' || substr($basePath, -1) != '/') { $basePath .= '/'; } $host = $request->getServer('HTTP_HOST'); if (!$host) { $host = $request->getServer('SERVER_NAME'); $serverPort = intval($request->getServer('SERVER_PORT')); if ($serverPort && $serverPort != 80 && $serverPort != 443) { $host .= ':' . $serverPort; } } $protocol = $request->isSecure() ? 'https' : 'http'; $requestUri = $request->getRequestUri(); return array('basePath' => $basePath, 'host' => $host, 'protocol' => $protocol, 'fullBasePath' => $protocol . '://' . $host . $basePath, 'requestUri' => $requestUri, 'fullUri' => $protocol . '://' . $host . $requestUri); }
/** * Initialize the paths, the config values and all the render stuff. * * @return void */ public function _initialize() { // Report all PHP errors error_reporting(-1); define('PHPR_CORE_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'application'); define('PHPR_LIBRARY_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'library'); if (!defined('PHPR_CONFIG_FILE')) { define('PHPR_CONFIG_FILE', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'configuration.php'); } set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Phprojekt/Loader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Phprojekt_Loader', 'autoload')); // Read the config file, but only the production setting try { $this->_config = new Zend_Config_Ini(PHPR_CONFIG_FILE, PHPR_CONFIG_SECTION, true); } catch (Zend_Config_Exception $error) { $response = new Zend_Controller_Request_Http(); $webPath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; header("Location: " . $webPath . "setup.php"); die('You need the file configuration.php to continue. Have you tried the <a href="' . $webPath . 'setup.php">setup</a> routine?' . "\n" . '<br />Original error: ' . $error->getMessage()); } // Set webpath, tmpPath and applicationPath if (empty($this->_config->webpath)) { $response = new Zend_Controller_Request_Http(); $this->_config->webpath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; } define('PHPR_ROOT_WEB_PATH', $this->_config->webpath . 'index.php/'); define('PHPR_TEMP_PATH', $this->_config->tmpPath); define('PHPR_USER_CORE_PATH', $this->_config->applicationPath); set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . PHPR_CORE_PATH . PATH_SEPARATOR . PHPR_USER_CORE_PATH . PATH_SEPARATOR . get_include_path()); // Set the timezone to UTC date_default_timezone_set('UTC'); // Start zend session to handle all session stuff try { Zend_Session::start(); } catch (Zend_Session_Exception $error) { Zend_Session::writeClose(); Zend_Session::start(); Zend_Session::regenerateId(); error_log($error); } // Set a metadata cache and clean it $frontendOptions = array('automatic_serialization' => true); $backendOptions = array('cache_dir' => PHPR_TEMP_PATH . 'zendCache' . DIRECTORY_SEPARATOR); try { $this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); } catch (Exception $error) { die("The directory " . PHPR_TEMP_PATH . "zendCache do not exists or not have write access."); } Zend_Db_Table_Abstract::setDefaultMetadataCache($this->_cache); // Use for Debug only //Zend_Db_Table_Abstract::getDefaultMetadataCache()->clean(); // Check Logs $this->getLog(); $missingRequirements = array(); // The following extensions are either needed by components of the Zend Framework that are used // or by P6 components itself. $extensionsNeeded = array('mbstring', 'iconv', 'ctype', 'gd', 'pcre', 'pdo', 'Reflection', 'session', 'SPL', 'zlib'); // These settings need to be properly configured by the admin $settingsNeeded = array('magic_quotes_gpc' => 0, 'magic_quotes_runtime' => 0, 'magic_quotes_sybase' => 0); // Check the PHP version $requiredPhpVersion = "5.2.4"; if (version_compare(phpversion(), $requiredPhpVersion, '<')) { // This is a requirement of the Zend Framework $missingRequirements[] = "- PHP Version '" . $requiredPhpVersion . "' or newer"; } foreach ($extensionsNeeded as $extension) { if (!extension_loaded($extension)) { $missingRequirements[] = "- The '" . $extension . "' extension must be enabled."; } } // Check pdo library $mysql = extension_loaded('pdo_mysql'); $sqlite = extension_loaded('pdo_sqlite2'); $pgsql = extension_loaded('pdo_pgsql'); if (!$mysql && !$sqlite && !$pgsql) { $missingRequirements[] = "- You need one of these PDO extensions: pdo_mysql, pdo_pgsql or pdo_sqlite"; } foreach ($settingsNeeded as $conf => $value) { if (ini_get($conf) != $value) { $missingRequirements[] = "- The php.ini setting of '" . $conf . "' has to be '" . $value . "'."; } } if (!empty($missingRequirements)) { $message = "Your PHP does not meet the requirements needed for P6.<br />" . implode("<br />", $missingRequirements); die($message); } $helperPaths = $this->_getHelperPaths(); $view = $this->_setView($helperPaths); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); foreach ($helperPaths as $helperPath) { Zend_Controller_Action_HelperBroker::addPath($helperPath['directory']); } $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('Default'); $plugin->setErrorHandlerController('Error'); $plugin->setErrorHandlerAction('error'); $front = Zend_Controller_Front::getInstance(); $front->setDispatcher(new Phprojekt_Dispatcher()); $front->registerPlugin($plugin); $front->setDefaultModule('Default'); $front->setModuleControllerDirectoryName('Controllers'); $front->addModuleDirectory(PHPR_CORE_PATH); $front->addModuleDirectory(PHPR_USER_CORE_PATH); // Add SubModules directories with controlles $moduleDirectories = $this->_getControllersFolders($helperPaths); foreach ($moduleDirectories as $moduleDirectory) { $front->addModuleDirectory($moduleDirectory); } $front->setParam('useDefaultControllerAlways', true); // Define general error handler set_error_handler(array("Phprojekt", "errorHandler")); }
/** * returns requested url part * * @param string $part * @return string */ public static function getUrl($part = 'full') { $request = new Zend_Controller_Request_Http(); $pathname = $request->getBasePath(); $hostname = $request->getHttpHost(); $protocol = $request->getScheme(); switch ($part) { case 'path': $url = $pathname; break; case 'host': $url = $hostname; break; case 'protocol': $url = $protocol; break; case 'full': default: $url = $protocol . '://' . $hostname . $pathname; break; } return $url; }
/** * Initialize the paths, the config values and all the render stuff. * * @return void */ public function _initialize() { // Report all PHP errors error_reporting(-1); define('PHPR_CORE_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'application'); define('PHPR_LIBRARY_PATH', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'library'); if (!defined('PHPR_CONFIG_FILE')) { define('PHPR_CONFIG_FILE', PHPR_ROOT_PATH . DIRECTORY_SEPARATOR . 'configuration.php'); } set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . get_include_path()); require_once 'Zend/Loader/Autoloader.php'; require_once 'Phprojekt/Loader.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->pushAutoloader(array('Phprojekt_Loader', 'autoload')); // Read the config file, but only the production setting try { $this->_config = new Zend_Config_Ini(PHPR_CONFIG_FILE, PHPR_CONFIG_SECTION, true); } catch (Zend_Config_Exception $error) { $response = new Zend_Controller_Request_Http(); $webPath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; header("Location: " . $webPath . "setup.php"); die('You need the file configuration.php to continue. Have you tried the <a href="' . $webPath . 'setup.php">setup</a> routine?' . "\n" . '<br />Original error: ' . $error->getMessage()); } // Set webpath, tmpPath and applicationPath if (empty($this->_config->webpath)) { $response = new Zend_Controller_Request_Http(); $this->_config->webpath = $response->getScheme() . '://' . $response->getHttpHost() . $response->getBasePath() . '/'; } define('PHPR_ROOT_WEB_PATH', $this->_config->webpath . 'index.php/'); define('PHPR_TEMP_PATH', $this->_config->tmpPath); define('PHPR_USER_CORE_PATH', $this->_config->applicationPath); set_include_path('.' . PATH_SEPARATOR . PHPR_LIBRARY_PATH . PATH_SEPARATOR . PHPR_CORE_PATH . PATH_SEPARATOR . PHPR_USER_CORE_PATH . PATH_SEPARATOR . get_include_path()); // Set the timezone to UTC date_default_timezone_set('UTC'); // Start zend session to handle all session stuff try { Zend_Session::start(); } catch (Zend_Session_Exception $error) { Zend_Session::writeClose(); Zend_Session::start(); Zend_Session::regenerateId(); error_log($error); } // Set a metadata cache and clean it $frontendOptions = array('automatic_serialization' => true); $backendOptions = array('cache_dir' => PHPR_TEMP_PATH . 'zendCache' . DIRECTORY_SEPARATOR); try { $this->_cache = Zend_Cache::factory('Core', 'File', $frontendOptions, $backendOptions); } catch (Exception $error) { die("The directory " . PHPR_TEMP_PATH . "zendCache do not exists or not have write access."); } Zend_Db_Table_Abstract::setDefaultMetadataCache($this->_cache); // Use for Debug only //Zend_Db_Table_Abstract::getDefaultMetadataCache()->clean(); // Check Logs $this->getLog(); // Check the server $checkServer = Phprojekt::checkExtensionsAndSettings(); // Check the PHP version if (!$checkServer['requirements']['php']['checked']) { $missingRequirements[] = "- You need the PHP Version '" . $checkServer['requirements']['php']['required'] . "' or newer"; } // Check required extension foreach ($checkServer['requirements']['extension'] as $name => $values) { if (!$values['checked']) { $missingRequirements[] = "- The '" . $name . "' extension must be enabled."; } } // Check required settings foreach ($checkServer['requirements']['settings'] as $name => $values) { if (!$values['checked']) { $missingRequirements[] = "- The php.ini setting of '" . $name . "' has to be '" . $values['required'] . "'."; } } // Show message if (!empty($missingRequirements)) { $message = "Your PHP does not meet the requirements needed for P6.<br />" . implode("<br />", $missingRequirements); die($message); } $helperPaths = $this->_getHelperPaths(); $view = $this->_setView($helperPaths); $viewRenderer = new Zend_Controller_Action_Helper_ViewRenderer($view); $viewRenderer->setViewBasePathSpec(':moduleDir/Views'); $viewRenderer->setViewScriptPathSpec(':action.:suffix'); Zend_Controller_Action_HelperBroker::addHelper($viewRenderer); foreach ($helperPaths as $helperPath) { Zend_Controller_Action_HelperBroker::addPath($helperPath['directory']); } $plugin = new Zend_Controller_Plugin_ErrorHandler(); $plugin->setErrorHandlerModule('Default'); $plugin->setErrorHandlerController('Error'); $plugin->setErrorHandlerAction('error'); $front = Zend_Controller_Front::getInstance(); $front->setDispatcher(new Phprojekt_Dispatcher()); $front->registerPlugin($plugin); $front->setDefaultModule('Default'); $front->setModuleControllerDirectoryName('Controllers'); $front->addModuleDirectory(PHPR_CORE_PATH); $front->addModuleDirectory(PHPR_USER_CORE_PATH); // Add SubModules directories with controlles $moduleDirectories = $this->_getControllersFolders($helperPaths); foreach ($moduleDirectories as $moduleDirectory) { $front->addModuleDirectory($moduleDirectory); } $front->setParam('useDefaultControllerAlways', true); // Define general error handler set_error_handler(array("Phprojekt", "errorHandler")); }
public function testGetSetBasePath() { $this->_request->setBasePath('/news'); $this->assertEquals('/news', $this->_request->getBasePath()); }