er( $host ), '.' ); return self::memoize( __FUNCTION__, [], rawurlencode( $host ) ); } /** * Get the path to an existing config file. * * @since 3.3 * @access protected * @author Grégory Viguier * * @return string|bool The path to the file. False if no file is found. */ public function get_config_file_path() { if ( self::is_memoized( __FUNCTION__ ) ) { return self::get_memoized( __FUNCTION__ ); } $config_dir_real_path = realpath( self::$config_dir_path ) . DIRECTORY_SEPARATOR; $host = $this->get_host(); $path = str_replace( '\\', '/', strtok( $this->get_server_input( 'REQUEST_URI', '' ), '?' ) ); $path = preg_replace( '|(?<=.)/+|', '/', $path ); $path = explode( '%2F', preg_replace( '/^(?:%2F)*(.*?)(?:%2F)*$/', '$1', rawurlencode( $path ) ) ); foreach ( $path as $p ) { static $dir; if ( realpath( self::$config_dir_path . $host . '.' . $p . '.php' ) && 0 === stripos( realpath( self::$config_dir_path . $host . '.' . $p . '.php' ), $config_dir_real_path ) ) { $config_file_path = self::$config_dir_path . $host . '.' . $p . '.php'; return self::memoize( __FUNCTION__, [], [ 'success' => true, 'path' => $config_file_path, ] ); } if ( realpath( self::$config_dir_path . $host . '.' . $dir . $p . '.php' ) && 0 === stripos( realpath( self::$config_dir_path . $host . '.' . $dir . $p . '.php' ), $config_dir_real_path ) ) { $config_file_path = self::$config_dir_path . $host . '.' . $dir . $p . '.php'; return self::memoize( __FUNCTION__, [], [ 'success' => true, 'path' => $config_file_path, ] ); } $dir .= $p . '.'; } if ( realpath( self::$config_dir_path . $host . '.php' ) && 0 === stripos( realpath( self::$config_dir_path . $host . '.php' ), $config_dir_real_path ) ) { $config_file_path = self::$config_dir_path . $host . '.php'; return self::memoize( __FUNCTION__, [], [ 'success' => true, 'path' => $config_file_path, ] ); } return self::memoize( __FUNCTION__, [], [ 'success' => false, 'path' => self::$config_dir_path . $host . implode( '/', $path ) . '.php', ] ); } /** ----------------------------------------------------------------------------------------- */ /** SPECIFIC CONFIG GETTERS ================================================================= */ /** ----------------------------------------------------------------------------------------- */ /** * Get rejected cookies as a regex pattern. * `#` is used as pattern delimiter. * * @since 3.3 * @access protected * @author Grégory Viguier * * @return string */ public function get_rejected_cookies() { $rejected_cookies = $this->get_config( 'cache_reject_cookies' ); if ( '' === $rejected_cookies ) { return $rejected_cookies; } return '#' . $rejected_cookies . '#'; } /** * Get mandatory cookies as a regex pattern. * `#` is used as pattern delimiter. * * @since 3.3 * @access protected * @author Grégory Viguier * * @return string */ public function get_mandatory_cookies() { $mandatory_cookies = $this->get_config( 'cache_mandatory_cookies' ); if ( '' === $mandatory_cookies ) { return $mandatory_cookies; } return '#' . $mandatory_cookies . '#'; } }