throw new WindowsPathMaxLengthException(); } if (!file_exists($path)) { $dirname = dirname($path); if (!is_dir($dirname)) { if (!@mkdir($dirname, $this->dirPermissions, true)) { if (!is_dir($dirname)) { return false; } } } if (!(touch($path) && chmod($path, $this->filePermissions))) { return false; } } $storeString = $this->getEncoder()->serialize($this->makeKeyString($key), $data, $expiration); $result = file_put_contents($path, $storeString, LOCK_EX); // If opcache is switched on, it will try to cache the PHP data file // The new php opcode caching system only revalidates against the source files once every few seconds, // so some changes will not be caught. // This fix immediately invalidates that opcode cache after a file is written, // so that future includes are not using the stale opcode cached file. if (function_exists('opcache_invalidate')) { $invalidate = true; if ($restrictedDirectory = ini_get('opcache.restrict_api')) { if (strpos(__FILE__, $restrictedDirectory) !== 0) { $invalidate = false; } } if ($invalidate) { @opcache_invalidate($path, true); } }
throw new WindowsPathMaxLengthException(); } if (!file_exists($path)) { $dirname = dirname($path); if (!is_dir($dirname)) { if (!@mkdir($dirname, $this->dirPermissions, true)) { if (!is_dir($dirname)) { return false; } } } if (!(touch($path) && chmod($path, $this->filePermissions))) { return false; } } $storeString = $this->getEncoder()->serialize($this->makeKeyString($key), $data, $expiration); $result = file_put_contents($path, $storeString, LOCK_EX); // If opcache is switched on, it will try to cache the PHP data file // The new php opcode caching system only revalidates against the source files once every few seconds, // so some changes will not be caught. // This fix immediately invalidates that opcode cache after a file is written, // so that future includes are not using the stale opcode cached file. if (function_exists('opcache_invalidate')) { $invalidate = true; if ($restrictedDirectory = ini_get('opcache.restrict_api')) { if (strpos(__FILE__, $restrictedDirectory) !== 0) { $invalidate = false; } } if ($invalidate) { @opcache_invalidate($path, true); } }
$cacheTime = $expiration - $store['createdOn']; } else { $cacheTime = self::$cacheTime; } $expiration = $store['createdOn'] + $cacheTime; if ($cacheTime > 0) { $expirationDiff = rand(0, floor($cacheTime * .15)); $expiration -= $expirationDiff; } if ($this->stampedeRunning === true) { $spkey = $this->key; $spkey[0] = 'sp'; // change "cache" data namespace to stampede namespace $this->driver->clear($spkey); $this->stampedeRunning = false; } return $this->driver->storeData($this->key, $store, $expiration); } /** * {@inheritdoc} */ public function extend($ttl = null) { if ($this->isDisabled()) { return false; } return $this->set($this->get(), $ttl); } /** * {@inheritdoc} */ public function isDisabled() { return self::$runtimeDisable
} else { $date->sub($dateInterval); } $this->expiration = $date; } elseif ($time instanceof \DateInterval) { $date->add($time); $this->expiration = $date; } else { } return $this; } /** * {@inheritdoc} */ public function save() { try { return $this->executeSet($this->data, $this->expiration); } catch (Exception $e) { $this->logException('Setting value in cache caused exception.', $e); $this->disable(); return false; } } private function executeSet($data, $time) { if ($this->isDisabled() || !isset($this->key)) { return false; } $store = array(); $store['return'] = $data; $store['createdOn'] = time(); if (isset($time) && (($time instanceof \DateTime) || ($time instanceof \DateTimeInterface))) { $expiration = $time->getTimestamp();
$items[$item->getKey()] = $item; } return new \ArrayIterator($items); } /** * {@inheritdoc} */ public function hasItem($key) { return $this->getItem($key)->isHit(); } /** * {@inheritdoc} */ public function save(CacheItemInterface $item) { return $item->save(); } /** * {@inheritdoc} */ public function saveDeferred(CacheItemInterface $item) { return $this->save($item); } /** * {@inheritdoc} */ public function commit() { return true; } /**
public function flush() { return $this->pool->clear(); } /** * Gets a value from the cache. * * @param string $key Name of the cache item ID * * @return \Stash\Interfaces\ItemInterface */ public function getItem($key) { return $this->pool->getItem($key); } public function save(CacheItemInterface $item) { $this->pool->save($item); } /** * Enables the cache. */ public function enable() { if ($this->driver !== null) { $this->pool->setDriver($this->driver); } $this->enabled = true; } /** * Disables the cache. */ public function disable() { // save the current driver if not yet black hole so it can be restored on enable() if (!($this->pool->getDriver() instanceof BlackHole)) {
return false; } return $this->getC5Cache()->exists('doctrine/' . $id); } /** * {@inheritdoc} */ protected function doSave($id, $data, $lifeTime = 0) { $cache = $this->getC5Cache(); if (!$cache->isEnabled()) { return false; } if ($lifeTime === 0) { $lifeTime = null; } return $cache->save($cache->getItem('doctrine/' . $id)->set($data, $lifeTime)); } /** * {@inheritdoc} */ protected function doDelete($id) { if (!$this->getC5Cache()->isEnabled()) { return false; } return $this->getC5Cache()->delete('doctrine/' . $id); } /** * {@inheritdoc} */ protected function doFlush() { if (!$this->getC5Cache()->isEnabled()) {
$namespacedKeysAndValues[$this->getNamespacedId($key)] = $value; } return $this->doSaveMultiple($namespacedKeysAndValues, $lifetime); } /** * {@inheritdoc} */ public function contains($id) { return $this->doContains($this->getNamespacedId($id)); } /** * {@inheritdoc} */ public function save($id, $data, $lifeTime = 0) { return $this->doSave($this->getNamespacedId($id), $data, $lifeTime); } /** * {@inheritdoc} */ public function delete($id) { return $this->doDelete($this->getNamespacedId($id)); } /** * {@inheritdoc} */ public function getStats() { return $this->doGetStats(); } /** * {@inheritDoc}
if (!$this->debug || $this->isCacheFresh($cacheKey, $class)) { return $data; } } return false; } /** * Saves a value to the cache. * * @param string $rawCacheKey The cache key. * @param mixed $value The value. * * @return void */ private function saveToCache($rawCacheKey, $value) { $cacheKey = $rawCacheKey . self::$CACHE_SALT; $this->cache->save($cacheKey, $value); if ($this->debug) { $this->cache->save('[C]'.$cacheKey, time()); } } /** * Checks if the cache is fresh. * * @param string $cacheKey * @param \ReflectionClass $class * * @return boolean */ private function isCacheFresh($cacheKey, \ReflectionClass $class) { if (false === $filename = $class->getFilename()) { return true; } return $this->cache->fetch('[C]'.$cacheKey) >= filemtime($filename);
{ $this->delegate = $reader; $this->cache = $cache; $this->debug = (boolean) $debug; } /** * {@inheritDoc} */ public function getClassAnnotations(\ReflectionClass $class) { $cacheKey = $class->getName(); if (isset($this->loadedAnnotations[$cacheKey])) { return $this->loadedAnnotations[$cacheKey]; } if (false === ($annots = $this->fetchFromCache($cacheKey, $class))) { $annots = $this->delegate->getClassAnnotations($class); $this->saveToCache($cacheKey, $annots); } return $this->loadedAnnotations[$cacheKey] = $annots; } /** * {@inheritDoc} */ public function getClassAnnotation(\ReflectionClass $class, $annotationName) { foreach ($this->getClassAnnotations($class) as $annot) { if ($annot instanceof $annotationName) { return $annot; } } return null; } /**
*/ public function setFileExtension($fileExtension) { $this->fileExtension = $fileExtension; } /** * Returns whether the class with the specified name is transient. Only non-transient * classes, that is entities and mapped superclasses, should have their metadata loaded. * * A class is non-transient if it is annotated with an annotation * from the {@see AnnotationDriver::entityAnnotationClasses}. * * @param string $className * * @return boolean */ public function isTransient($className) { $classAnnotations = $this->reader->getClassAnnotations(new \ReflectionClass($className)); foreach ($classAnnotations as $annot) { if (isset($this->entityAnnotationClasses[get_class($annot)])) { return false; } } return true; } /** * {@inheritDoc} */ public function getAllClassNames() { if ($this->classNames !== null) { return $this->classNames; } if (!$this->paths) { throw MappingException::pathRequired();
$exclude = str_replace('\\', '/', realpath($excludePath)); $current = str_replace('\\', '/', $sourceFile); if (strpos($current, $exclude) !== false) { continue 2; } } require_once $sourceFile; $includedFiles[] = $sourceFile; } } $declared = get_declared_classes(); foreach ($declared as $className) { $rc = new \ReflectionClass($className); $sourceFile = $rc->getFileName(); if (in_array($sourceFile, $includedFiles) && ! $this->isTransient($className)) { $classes[] = $className; } } $this->classNames = $classes; return $classes; } }
return; } throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); } /** * {@inheritDoc} */ public function getAllClassNames() { $classNames = []; $driverClasses = []; /* @var $driver MappingDriver */ foreach ($this->drivers AS $namespace => $driver) { $oid = spl_object_hash($driver); if (!isset($driverClasses[$oid])) { $driverClasses[$oid] = $driver->getAllClassNames(); } foreach ($driverClasses[$oid] AS $className) { if (strpos($className, $namespace) === 0) { $classNames[$className] = true; } } } if (null !== $this->defaultDriver) { foreach ($this->defaultDriver->getAllClassNames() as $className) { $classNames[$className] = true; } } return array_keys($classNames); } /** * {@inheritDoc}
throw MappingException::mappedClassNotPartOfDiscriminatorMap($metadata->name, $metadata->rootEntityName); } /** * Adds a default discriminator map if no one is given * * If an entity is of any inheritance type and does not contain a * discriminator map, then the map is generated automatically. This process * is expensive computation wise. * * The automatically generated discriminator map contains the lowercase short name of * each class as key. * * @param \Doctrine\ORM\Mapping\ClassMetadata $class * * @throws MappingException */ private function addDefaultDiscriminatorMap(ClassMetadata $class) { $allClasses = $this->driver->getAllClassNames(); $fqcn = $class->getName(); $map = array($this->getShortName($class->name) => $fqcn); $duplicates = array(); foreach ($allClasses as $subClassCandidate) { if (is_subclass_of($subClassCandidate, $fqcn)) { $shortName = $this->getShortName($subClassCandidate); if (isset($map[$shortName])) { $duplicates[] = $shortName; } $map[$shortName] = $subClassCandidate; } } if ($duplicates) { throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); }
$this->addInheritedNamedQueries($class, $parent); } if ( ! empty($parent->namedNativeQueries)) { $this->addInheritedNamedNativeQueries($class, $parent); } if ( ! empty($parent->sqlResultSetMappings)) { $this->addInheritedSqlResultSetMappings($class, $parent); } if ( ! empty($parent->entityListeners) && empty($class->entityListeners)) { $class->entityListeners = $parent->entityListeners; } } $class->setParentClasses($nonSuperclassParents); if ($class->isRootEntity() && ! $class->isInheritanceTypeNone() && ! $class->discriminatorMap) { $this->addDefaultDiscriminatorMap($class); } if ($this->evm->hasListeners(Events::loadClassMetadata)) { $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); } $this->validateRuntimeMetadata($class, $parent); } /** * Validate runtime metadata is correctly defined. * * @param ClassMetadata $class * @param ClassMetadataInterface|null $parent * * @return void * * @throws MappingException */
// Move down the hierarchy of parent classes, starting from the topmost class $parent = null; $rootEntityFound = false; $visited = []; $reflService = $this->getReflectionService(); foreach ($parentClasses as $className) { if (isset($this->loadedMetadata[$className])) { $parent = $this->loadedMetadata[$className]; if ($this->isEntity($parent)) { $rootEntityFound = true; array_unshift($visited, $className); } continue; } $class = $this->newClassMetadataInstance($className); $this->initializeReflection($class, $reflService); $this->doLoadMetadata($class, $parent, $rootEntityFound, $visited); $this->loadedMetadata[$className] = $class; $parent = $class; if ($this->isEntity($class)) { $rootEntityFound = true; array_unshift($visited, $className); } $this->wakeupReflection($class, $reflService); $loaded[] = $className; } return $loaded; } /** * Provides a fallback hook for loading metadata when loading failed due to reflection/mapping exceptions
* @var \Doctrine\Common\Persistence\Mapping\Driver\MappingDriver */ private $driver; /** * @var \Doctrine\Common\EventManager */ private $evm; /** * @var array */ private $embeddablesActiveNesting = array(); /** * {@inheritDoc} */ protected function loadMetadata($name) { $loaded = parent::loadMetadata($name); array_map([$this, 'resolveDiscriminatorValue'], array_map([$this, 'getMetadataFor'], $loaded)); return $loaded; } /** * @param EntityManagerInterface $em */ public function setEntityManager(EntityManagerInterface $em) { $this->em = $em; } /** * {@inheritDoc} */ protected function initialize() { $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl();
$realClassName = $this->getFqcnFromAlias($namespaceAlias, $simpleClassName); } else { $realClassName = ClassUtils::getRealClass($className); } if (isset($this->loadedMetadata[$realClassName])) { // We do not have the alias name in the map, include it return $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; } $loadingException = null; try { if ($this->cacheDriver) { if (($cached = $this->cacheDriver->fetch($realClassName . $this->cacheSalt)) instanceof ClassMetadata) { $this->loadedMetadata[$realClassName] = $cached; $this->wakeupReflection($cached, $this->getReflectionService()); } else { foreach ($this->loadMetadata($realClassName) as $loadedClassName) { $this->cacheDriver->save( $loadedClassName . $this->cacheSalt, $this->loadedMetadata[$loadedClassName], null ); } } } else { $this->loadMetadata($realClassName); } } catch (MappingException $loadingException) { if (! $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName)) { throw $loadingException; } $this->loadedMetadata[$realClassName] = $fallbackMetadataResponse; } if ($className !== $realClassName) { // We do not have the alias name in the map, include it
/** * Returns the ORM metadata descriptor for a class. * * The class name must be the fully-qualified class name without a leading backslash * (as it is returned by get_class($obj)) or an aliased class name. * * Examples: * MyProject\Domain\User * sales:PriceRequest * * Internal note: Performance-sensitive method. * * @param string $className * * @return \Doctrine\ORM\Mapping\ClassMetadata */ public function getClassMetadata($className) { return $this->metadataFactory->getMetadataFor($className); } /** * {@inheritDoc} */ public function createQuery($dql = '') { $query = new Query($this); if ( ! empty($dql)) { $query->setDql($dql); } return $query; } /** * {@inheritDoc} */ public function createNamedQuery($name)
} /** * Gets the SQL join fragment used when selecting entities from an association. * * @param string $field * @param array $assoc * @param ClassMetadata $class * @param string $alias * * @return string */ protected function getSelectColumnAssociationSQL($field, $assoc, ClassMetadata $class, $alias = 'r') { if ( ! ($assoc['isOwningSide'] && $assoc['type'] & ClassMetadata::TO_ONE) ) { return ''; } $columnList = array(); $targetClass = $this->em->getClassMetadata($assoc['targetEntity']); foreach ($assoc['joinColumns'] as $joinColumn) { $type = null; $isIdentifier = isset($assoc['id']) && $assoc['id'] === true; $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); $resultColumnName = $this->getSQLColumnAlias($joinColumn['name']); $columnList[] = $this->getSQLTableAlias($class->name, ($alias == 'r' ? '' : $alias) ) . '.' . $quotedColumn . ' AS ' . $resultColumnName; $type = PersisterHelper::getTypeOfColumn($joinColumn['referencedColumnName'], $targetClass, $this->em); $this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $quotedColumn, $isIdentifier, $type); } return implode(', ', $columnList); } /** * Gets the SQL join fragment used when selecting entities from a * many-to-many association. *
*/ protected function getSelectColumnsSQL() { if ($this->currentPersisterContext->selectColumnListSql !== null) { return $this->currentPersisterContext->selectColumnListSql; } $columnList = array(); $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root // Add regular columns to select list foreach ($this->class->fieldNames as $field) { $columnList[] = $this->getSelectColumnSQL($field, $this->class); } $this->currentPersisterContext->selectJoinSql = ''; $eagerAliasCounter = 0; foreach ($this->class->associationMappings as $assocField => $assoc) { $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $assoc, $this->class); if ($assocColumnSQL) { $columnList[] = $assocColumnSQL; } $isAssocToOneInverseSide = $assoc['type'] & ClassMetadata::TO_ONE && ! $assoc['isOwningSide']; $isAssocFromOneEager = $assoc['type'] !== ClassMetadata::MANY_TO_MANY && $assoc['fetch'] === ClassMetadata::FETCH_EAGER; if ( ! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { continue; } if ((($assoc['type'] & ClassMetadata::TO_MANY) > 0) && $this->currentPersisterContext->handlesLimits) { continue; } $eagerEntity = $this->em->getClassMetadata($assoc['targetEntity']); if ($eagerEntity->inheritanceType != ClassMetadata::INHERITANCE_TYPE_NONE) { continue; // now this is why you shouldn't use inheritance
if ($orderBy) { $orderBySql = $this->getOrderBySQL($orderBy, $this->getSQLTableAlias($this->class->name)); } $conditionSql = ($criteria instanceof Criteria) ? $this->getSelectConditionCriteriaSQL($criteria) : $this->getSelectConditionSQL($criteria, $assoc); switch ($lockMode) { case LockMode::PESSIMISTIC_READ: $lockSql = ' ' . $this->platform->getReadLockSql(); break; case LockMode::PESSIMISTIC_WRITE: $lockSql = ' ' . $this->platform->getWriteLockSql(); break; } $columnList = $this->getSelectColumnsSQL(); $tableAlias = $this->getSQLTableAlias($this->class->name); $filterSql = $this->generateFilterConditionSQL($this->class, $tableAlias); $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); if ('' !== $filterSql) { $conditionSql = $conditionSql ? $conditionSql . ' AND ' . $filterSql : $filterSql; } $select = 'SELECT ' . $columnList; $from = ' FROM ' . $tableName . ' '. $tableAlias; $join = $this->currentPersisterContext->selectJoinSql . $joinSql; $where = ($conditionSql ? ' WHERE ' . $conditionSql : ''); $lock = $this->platform->appendLockHint($from, $lockMode); $query = $select . $lock . $join . $where . $orderBySql;
{ return $this->prepareUpdateData($entity); } /** * {@inheritdoc} */ public function getOwningTable($fieldName) { return $this->class->getTableName(); } /** * {@inheritdoc} */ public function load(array $criteria, $entity = null, $assoc = null, array $hints = array(), $lockMode = null, $limit = null, array $orderBy = null) { $this->switchPersisterContext(null, $limit); $sql = $this->getSelectSQL($criteria, $assoc, $lockMode, $limit, null, $orderBy); list($params, $types) = $this->expandParameters($criteria); $stmt = $this->conn->executeQuery($sql, $params, $types); if ($entity !== null) { $hints[Query::HINT_REFRESH] = true; $hints[Query::HINT_REFRESH_ENTITY] = $entity; } $hydrator = $this->em->newHydrator($this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); $entities = $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, $hints); return $entities ? $entities[0] : null; } /** * {@inheritdoc} */ public function loadById(array $identifier, $entity = null) { return $this->load($identifier, $entity);
public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) { $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); return $persister->loadAll($criteria, $orderBy, $limit, $offset); } /** * Finds a single entity by a set of criteria. * * @param array $criteria * @param array|null $orderBy * * @return object|null The entity instance or NULL if the entity can not be found. */ public function findOneBy(array $criteria, array $orderBy = null) { $persister = $this->_em->getUnitOfWork()->getEntityPersister($this->_entityName); return $persister->load($criteria, null, null, array(), null, 1, $orderBy); } /** * Adds support for magic finders. * * @param string $method * @param array $arguments * * @return array|object The found entity/entities. * * @throws ORMException * @throws \BadMethodCallException If the method called is an invalid find* method * or no find* method at all and therefore an invalid * method call. */ public function __call($method, $arguments) { switch (true) { case (0 === strpos($method, 'findBy')): $by = substr($method, 6);
public function __construct(EntityManagerInterface $entityManager) { $this->entityManager = $entityManager; } public function getByID($id) { return $this->entityManager->find('Concrete\Core\Entity\Site\Locale', $id); } /** * Get the default site locale (if set). * * @return Locale|null */ public function getDefaultLocale() { try { return $this->entityManager->getRepository(Locale::class)->findOneBy(['msIsDefault' => true]); } catch (TableNotFoundException $e) { return null; } } public function setDefaultLocale(Locale $defaultLocale) { foreach ($defaultLocale->getSite()->getLocales() as $locale) { $locale->setIsDefault(false); $this->entityManager->persist($locale); } $this->entityManager->flush(); $defaultLocale->setIsDefault(true); $this->entityManager->persist($defaultLocale); $this->entityManager->flush(); } public function add(Site $site, $language, $country) {
* Get the ID of the home page. * * @param Page|int $page the page (or its ID) for which you want the home (if not specified, we'll use the default locale site tree) * * @return int|null returns NULL if $page is null (or it doesn't have a SiteTree associated) and if there's no default locale */ public static function getHomePageID($page = null) { if ($page) { if (!$page instanceof self) { $page = self::getByID($page); } if ($page instanceof self) { $siteTree = $page->getSiteTreeObject(); if ($siteTree !== null) { return $siteTree->getSiteHomePageID(); } } } $locale = Application::getFacadeApplication()->make(LocaleService::class)->getDefaultLocale(); if ($locale !== null) { $siteTree = $locale->getSiteTreeObject(); if ($siteTree != null) { return $siteTree->getSiteHomePageID(); } } $entityManager = Application::getFacadeApplication()->make(EntityManagerInterface::class); try { $site = $entityManager->getRepository('Concrete\Core\Entity\Site\Site') ->findOneBy(['siteIsDefault' => true]); if ($site !== null) { return $site->getSiteHomePageID(); } } catch (\Exception $e) { return null; }
$collectionPath .= '/' . implode('/', $extra); } } $collectionPath = trim($collectionPath, '/'); if ($collectionPath !== '') { return urlencode($host . '/' . $collectionPath); } $cID = $mixed->getCollectionID(); if ($cID && $cID == ConcretePage::getHomePageID()) { return urlencode($host) . '!' . $cID; } } elseif ($mixed instanceof Request) { $host = $this->getCacheHost($mixed); $path = trim((string) $mixed->getPath(), '/'); if ($path !== '') { return urlencode($host . '/' . $path); } return urlencode($host) . '!' . ConcretePage::getHomePageID(); } elseif ($mixed instanceof PageCacheRecord) { return $mixed->getCacheRecordKey(); } } /** * Get the host name under which the page or request belongs to. * * @param \Concrete\Core\Page\Page|\Concrete\Core\Http\Request|mixed $mixed * * @return string|null Returns NULL if $mixed is not a recognized type, a string otherwise */ public function getCacheHost($mixed) { if ($mixed instanceof ConcretePage) { $site = $mixed->getSite(); if (is_object($site)) { $host = $site->getSiteCanonicalURL(); if (!empty($host)) { $host = preg_replace('#^https?://#', '', $host);
use Concrete\Core\Page\Page as ConcretePage; use Loader; class FilePageCache extends PageCache { public function getRecord($mixed) { $file = $this->getCacheFile($mixed); if (file_exists($file)) { $contents = file_get_contents($file); $record = @unserialize($contents); if ($record instanceof PageCacheRecord) { return $record; } } } protected function getCacheFile($mixed) { $key = $this->getCacheKey($mixed); if ($key) { $key = hash('sha256', $key); $filename = $key . '.cache'; $dir = Config::get('concrete.cache.page.directory') . '/' . $key[0] . '/' . $key[1] . '/' . $key[2]; if ($dir && (!is_dir($dir))) { @mkdir($dir, Config::get('concrete.filesystem.permissions.directory'), true); } $path = $dir . '/' . $filename; return $path; } } public function purgeByRecord(\Concrete\Core\Cache\Page\PageCacheRecord $rec) { $file = $this->getCacheFile($rec); if ($file && file_exists($file)) { @unlink($file); } }
<?php namespace Concrete\Core\Cache\Page; use Config; use Concrete\Core\Page\Page as ConcretePage; use Loader; class FilePageCache extends PageCache { public function getRecord($mixed) { $file = $this->getCacheFile($mixed); if (file_exists($file)) { $contents = file_get_contents($file); $record = @unserialize($contents); if ($record instanceof PageCacheRecord) { return $record; } } } protected function getCacheFile($mixed) { $key = $this->getCacheKey($mixed); if ($key) { $key = hash('sha256', $key); $filename = $key . '.cache'; $dir = Config::get('concrete.cache.page.directory') . '/' . $key[0] . '/' . $key[1] . '/' . $key[2]; if ($dir && (!is_dir($dir))) { @mkdir($dir, Config::get('concrete.filesystem.permissions.directory'), true); } $path = $dir . '/' . $filename; return $path; } } public function purgeByRecord(\Concrete\Core\Cache\Page\PageCacheRecord $rec) { $file = $this->getCacheFile($rec);
if (!$this->isShared('config')) { throw new Exception('Attempting to check install status before application initialization.'); } $this->installed = $this->make('config')->get('concrete.installed'); } return $this->installed; } /** * Checks to see whether we should deliver a concrete5 response from the page cache. * * @param \Concrete\Core\Http\Request $request */ public function checkPageCache(\Concrete\Core\Http\Request $request) { $library = PageCache::getLibrary(); if ($library->shouldCheckCache($request)) { $record = $library->getRecord($request); if ($record instanceof PageCacheRecord) { if ($record->validate($request)) { return $library->deliver($record); } } } return false; } /** * Check if the core needs to be updated, and if so, updates it. * * @throws \Concrete\Core\System\Mutex\MutexBusyException throws a MutexBusyException exception if there upgrade process is already running * @throws \Concrete\Core\Updater\Migrations\MigrationIncompleteException throws a MigrationIncompleteException exception if there's still some migration pending */ public function handleAutomaticUpdates() { $update = false; $config = $this['config'];
&& $request->getPath() != '/install' && !$request->matches('/ccm/assets/localization/*') ) { $manager = $app->make('Concrete\Core\Url\Resolver\Manager\ResolverManager'); $response = new RedirectResponse($manager->resolve(['install'])); return $response; } } } /** * @param \Concrete\Core\Application\Application $app * @param \Concrete\Core\Http\Request $request * * @return null|Response */ private function checkCache(Application $app, Request $request) { $response = $app->checkPageCache($request); if ($response) { return $response; } } /** * @param \Concrete\Core\Application\Application $app */ private function initializePackages(Application $app) { $app->setupPackageAutoloaders(); } }
$request = $this->initializeRequest($config); /* * ---------------------------------------------------------------------------- * If we haven't installed, then we need to reroute. If we have, and we're * on the install page, and we haven't installed, then we need to dispatch * early and exit. * ---------------------------------------------------------------------------- */ if ($response = $this->checkInstall($app, $request)) { return $response; } if ($this->app->isInstalled()) { /* * ---------------------------------------------------------------------------- * Check the page cache in case we need to return a result early. * ---------------------------------------------------------------------------- */ if ($response = $this->checkCache($app, $request)) { return $response; } /* * ---------------------------------------------------------------------------- * Now we load all installed packages, and register their package autoloaders. * ---------------------------------------------------------------------------- */ $this->initializePackages($app); } } /** * Enable configuration. * * @param Application $app * * @return Repository */ private function initializeConfig(Application $app)
/* * ---------------------------------------------------------------------------- * Setup file cache directories. Has to come after we define services * because we use the file service. * ---------------------------------------------------------------------------- */ $app->setupFilesystem(); /* * ---------------------------------------------------------------------------- * Registries for theme paths, assets, routes and file types. * ---------------------------------------------------------------------------- */ $this->initializeAssets($config); $this->initializeRoutes($config); $this->initializeFileTypes($config); // If we're not in the CLI SAPI, lets do additional booting for HTTP if (!$this->app->isRunThroughCommandLineInterface()) { return $this->bootHttpSapi($config, $app); } } /** * @param $config * @param $app * * @return null|Response */ private function bootHttpSapi($config, $app) { /* * ---------------------------------------------------------------------------- * Initialize the request * ---------------------------------------------------------------------------- */ $request = $this->initializeRequest($config); /* * ----------------------------------------------------------------------------
{ $this->run_class = $run_class; } /** * @param string $boot_class */ public function setBootClass($boot_class) { $this->boot_class = $boot_class; } /** * Initialize the environment and prepare for running. */ public function boot() { $booter = $this->getBooter(); if ($response = $booter->boot()) { $this->sendResponse($response); } else { $this->status = self::STATUS_ACTIVE; } } /** * Begin the runtime. */ public function run() { switch ($this->status) { case self::STATUS_ENDED: // We've already ended, lets just return return; case self::STATUS_INACTIVE: throw new \RuntimeException('Runtime has not yet booted.'); }
* Handle text encoding. * ---------------------------------------------------------------------------- */ \Patchwork\Utf8\Bootup::initAll(); /* * ---------------------------------------------------------------------------- * Instantiate concrete5. * ---------------------------------------------------------------------------- */ /** @var \Concrete\Core\Application\Application $app */ $app = require DIR_APPLICATION . '/bootstrap/start.php'; $app->instance('app', $app); // Bind fully application qualified class names $app->instance('Concrete\Core\Application\Application', $app); $app->instance('Illuminate\Container\Container', $app); // Boot the runtime $app->getRuntime()->boot(); return $app;
* Make sure you cannot call dispatcher.php directly. * ---------------------------------------------------------------------------- */ if (basename($_SERVER['PHP_SELF']) === DISPATCHER_FILENAME_CORE) { die('Access Denied.'); } /* * ---------------------------------------------------------------------------- * Include all autoloaders. * ---------------------------------------------------------------------------- */ require __DIR__ . '/bootstrap/autoload.php'; /* * ---------------------------------------------------------------------------- * Begin concrete5 startup. * ---------------------------------------------------------------------------- */ $app = require __DIR__ . '/bootstrap/start.php'; /** @var \Concrete\Core\Application\Application $app */ /* * ---------------------------------------------------------------------------- * Run the runtime. * ---------------------------------------------------------------------------- */ $runtime = $app->getRuntime(); if ($response = $runtime->run()) { /* * ------------------------------------------------------------------------ * Shut it down. * ------------------------------------------------------------------------ */ $app->shutdown(); } else { return $app; }
<?php ini_set('session.save_handler', 'files'); ini_set('session.save_path', '/home/surfjoe/public_html/new.spacemakersusa.com/tmp'); require 'concrete/dispatcher.php';
Key | Value |
Version | 8.5.4 |
Installed Version | 8.5.4 |
Key | Value |
concrete.version | 8.5.4 |
concrete.version_installed | 8.5.4 |
concrete.version_db | 20200609145307 |
concrete.installed | true |
concrete.locale | en_US |
concrete.charset | UTF-8 |
concrete.charset_bom | |
concrete.maintenance_mode | false |
concrete.debug.display_errors | true |
concrete.debug.detail | debug |
concrete.debug.error_reporting | null |
concrete.proxy.host | null |
concrete.proxy.port | null |
concrete.proxy.user | null |
concrete.proxy.password | null |
concrete.upload.extensions | *.flv;*.jpg;*.gif;*.jpeg;*.ico;*.docx;*.xla;*.png;*.psd;*.swf;*.doc;*.txt;*.xls;*.xlsx;*.csv;*.pdf;*.tiff;*.rtf;*.m4a;*.mov;*.wmv;*.mpeg;*.mpg;*.wav;*.3gp;*.avi;*.m4v;*.mp4;*.mp3;*.qt;*.ppt;*.pptx;*.kml;*.xml;*.svg;*.webm;*.ogg;*.ogv |
concrete.upload.extensions_blacklist | *.php;*.php2;*.php3;*.php4;*.php5;*.php7;*.php8;*.phtml;*.phar;*.htaccess;*.pl;*.phpsh;*.pht;*.shtml;*.cgi |
concrete.upload.chunking.enabled | true |
concrete.upload.chunking.chunkSize | null |
concrete.export.csv.include_bom | false |
concrete.export.csv.datetime_format | ATOM |
concrete.interface.panel.page_relations | false |
concrete.mail.method | PHP_MAIL |
concrete.mail.methods.smtp.server | |
concrete.mail.methods.smtp.port | |
concrete.mail.methods.smtp.username | |
concrete.mail.methods.smtp.password | |
concrete.mail.methods.smtp.encryption | |
concrete.mail.methods.smtp.messages_per_connection | null |
concrete.cache.enabled | true |
concrete.cache.lifetime | 21600 |
concrete.cache.overrides | true |
concrete.cache.blocks | true |
concrete.cache.assets | false |
concrete.cache.theme_css | true |
concrete.cache.pages | false |
concrete.cache.doctrine_dev_mode | false |
concrete.cache.full_page_lifetime | default |
concrete.cache.full_page_lifetime_value | null |
concrete.cache.full_contents_assets_hash | false |
concrete.cache.directory | /home/surfjoe/public_html/application/files/cache |
concrete.cache.directory_relative | null |
concrete.cache.page.directory | /home/surfjoe/public_html/application/files/cache/pages |
concrete.cache.page.adapter | file |
concrete.cache.levels.overrides.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.overrides.drivers.core_filesystem.class | Concrete\Core\Cache\Driver\FileSystemStashDriver |
concrete.cache.levels.overrides.drivers.core_filesystem.options.path | /home/surfjoe/public_html/application/files/cache/overrides |
concrete.cache.levels.overrides.drivers.core_filesystem.options.dirPermissions | 493 |
concrete.cache.levels.overrides.drivers.core_filesystem.options.filePermissions | 420 |
concrete.cache.levels.overrides.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.overrides.drivers.redis.options.prefix | c5_overrides |
concrete.cache.levels.overrides.drivers.redis.options.database | 0 |
concrete.cache.levels.overrides.preferred_driver | core_filesystem |
concrete.cache.levels.expensive.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.expensive.drivers.core_filesystem.class | Concrete\Core\Cache\Driver\FileSystemStashDriver |
concrete.cache.levels.expensive.drivers.core_filesystem.options.path | /home/surfjoe/public_html/application/files/cache/expensive |
concrete.cache.levels.expensive.drivers.core_filesystem.options.dirPermissions | 493 |
concrete.cache.levels.expensive.drivers.core_filesystem.options.filePermissions | 420 |
concrete.cache.levels.expensive.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.expensive.drivers.redis.options.prefix | c5_expensive |
concrete.cache.levels.expensive.drivers.redis.options.database | 0 |
concrete.cache.levels.expensive.preferred_driver | core_filesystem |
concrete.cache.levels.object.drivers.core_ephemeral.class | \Stash\Driver\Ephemeral |
concrete.cache.levels.object.drivers.redis.class | Concrete\Core\Cache\Driver\RedisStashDriver |
concrete.cache.levels.object.drivers.redis.options.prefix | c5_object |
concrete.cache.levels.object.drivers.redis.options.database | 0 |
concrete.cache.levels.object.preferred_driver | core_ephemeral |
concrete.cache.clear.thumbnails | false |
concrete.design.enable_custom | true |
concrete.design.enable_layouts | true |
concrete.log.emails | true |
concrete.log.errors | true |
concrete.log.spam | false |
concrete.log.api | false |
concrete.log.enable_dashboard_report | true |
concrete.log.configuration.mode | simple |
concrete.log.configuration.simple.core_logging_level | NOTICE |
concrete.log.configuration.simple.handler | database |
concrete.log.configuration.simple.file.file | |
concrete.jobs.enable_scheduling | true |
concrete.filesystem.temp_directory | null |
concrete.filesystem.permissions.file | 420 |
concrete.filesystem.permissions.directory | 493 |
concrete.email.enabled | true |
concrete.email.default.address | concrete5-noreply@concrete5 |
concrete.email.default.name | |
concrete.email.form_block.address | false |
concrete.email.forgot_password.address | null |
concrete.email.forgot_password.name | null |
concrete.email.validate_registration.address | null |
concrete.email.validate_registration.name | null |
concrete.email.workflow_notification.address | null |
concrete.email.workflow_notification.name | null |
concrete.form.store_form_submissions | auto |
concrete.marketplace.enabled | true |
concrete.marketplace.request_timeout | 30 |
concrete.marketplace.token | null |
concrete.marketplace.site_token | null |
concrete.marketplace.intelligent_search | true |
concrete.marketplace.log_requests | false |
concrete.external.intelligent_search_help | true |
concrete.external.news | true |
concrete.misc.user_timezones | false |
concrete.misc.package_backup_directory | /home/surfjoe/public_html/application/files/trash |
concrete.misc.enable_progressive_page_reindex | true |
concrete.misc.mobile_theme_id | 0 |
concrete.misc.sitemap_approve_immediately | true |
concrete.misc.enable_translate_locale_en_us | false |
concrete.misc.page_search_index_lifetime | 259200 |
concrete.misc.enable_trash_can | true |
concrete.misc.app_version_display_in_header | true |
concrete.misc.default_jpeg_image_compression | 80 |
concrete.misc.default_png_image_compression | 9 |
concrete.misc.default_thumbnail_format | auto |
concrete.misc.inplace_image_operations_limit | 4194304 |
concrete.misc.basic_thumbnailer_generation_strategy | now |
concrete.misc.help_overlay | true |
concrete.misc.require_version_comments | false |
concrete.misc.enable_move_blocktypes_across_sets | false |
concrete.misc.image_editor_cors_policy.enable_cross_origin | false |
concrete.misc.image_editor_cors_policy.anonymous_request | true |
concrete.misc.generator_tag_display_in_header | true |
concrete.misc.login_redirect | DESKTOP |
concrete.misc.latest_version | 8.5.4 |
concrete.misc.do_page_reindex_check | false |
concrete.theme.compress_preprocessor_output | true |
concrete.theme.generate_less_sourcemap | false |
concrete.updates.enable_auto_update_packages | false |
concrete.updates.enable_permissions_protection | true |
concrete.updates.check_threshold | 172800 |
concrete.updates.services.get_available_updates | http://www.concrete5.org/tools/update_core |
concrete.updates.services.inspect_update | http://www.concrete5.org/tools/inspect_update |
concrete.updates.skip_core | false |
concrete.paths.trash | /!trash |
concrete.paths.drafts | /!drafts |
concrete.icons.page_template.width | 120 |
concrete.icons.page_template.height | 90 |
concrete.icons.theme_thumbnail.width | 120 |
concrete.icons.theme_thumbnail.height | 90 |
concrete.icons.file_manager_listing.handle | file_manager_listing |
concrete.icons.file_manager_listing.width | 60 |
concrete.icons.file_manager_listing.height | 60 |
concrete.icons.file_manager_detail.handle | file_manager_detail |
concrete.icons.file_manager_detail.width | 400 |
concrete.icons.file_manager_detail.height | 400 |
concrete.icons.user_avatar.width | 80 |
concrete.icons.user_avatar.height | 80 |
concrete.icons.user_avatar.default | /concrete/images/avatar_none.png |
concrete.file_manager.images.use_exif_data_to_rotate_images | false |
concrete.file_manager.images.manipulation_library | gd |
concrete.file_manager.images.create_high_dpi_thumbnails | true |
concrete.file_manager.images.preview_image_size | small |
concrete.file_manager.images.preview_image_popover | true |
concrete.file_manager.images.svg_sanitization.action | sanitize |
concrete.file_manager.images.svg_sanitization.allowed_tags | |
concrete.file_manager.images.svg_sanitization.allowed_attributes | |
concrete.file_manager.images.image_editor_save_area_background_color | |
concrete.file_manager.items_per_page_options.0 | 10 |
concrete.file_manager.items_per_page_options.1 | 25 |
concrete.file_manager.items_per_page_options.2 | 50 |
concrete.file_manager.items_per_page_options.3 | 100 |
concrete.file_manager.items_per_page_options.4 | 250 |
concrete.file_manager.results | 10 |
concrete.search_users.results | 10 |
concrete.sitemap_xml.file | sitemap.xml |
concrete.sitemap_xml.frequency | weekly |
concrete.sitemap_xml.priority | 0.5 |
concrete.accessibility.toolbar_titles | false |
concrete.accessibility.toolbar_large_font | false |
concrete.accessibility.display_help_system | true |
concrete.accessibility.toolbar_tooltips | true |
concrete.i18n.choose_language_login | false |
concrete.i18n.auto_install_package_languages | true |
concrete.i18n.community_translation.entry_point | http://translate.concrete5.org/api |
concrete.i18n.community_translation.api_token | |
concrete.i18n.community_translation.progress_limit | 60 |
concrete.i18n.community_translation.cache_lifetime | 3600 |
concrete.i18n.community_translation.package_url | https://translate.concrete5.org/translate/package |
concrete.urls.concrete5 | http://www.concrete5.org |
concrete.urls.concrete5_secure | https://www.concrete5.org |
concrete.urls.newsflow | http://newsflow.concrete5.org |
concrete.urls.background_feed | //backgroundimages.concrete5.org/wallpaper |
concrete.urls.privacy_policy | //www.concrete5.org/legal/privacy-policy |
concrete.urls.background_feed_secure | https://backgroundimages.concrete5.org/wallpaper |
concrete.urls.background_info | http://backgroundimages.concrete5.org/get_image_data.php |
concrete.urls.videos | https://www.youtube.com/user/concrete5cms/videos |
concrete.urls.help.developer | http://documentation.concrete5.org/developers |
concrete.urls.help.user | http://documentation.concrete5.org/editors |
concrete.urls.help.forum | http://www.concrete5.org/community/forums |
concrete.urls.help.slack | https://www.concrete5.org/slack |
concrete.urls.paths.menu_help_service | /tools/get_remote_help_list/ |
concrete.urls.paths.site_page | /private/sites |
concrete.urls.paths.newsflow_slot_content | /tools/slot_content/ |
concrete.urls.paths.marketplace.connect | /marketplace/connect |
concrete.urls.paths.marketplace.connect_success | /marketplace/connect/-/connected |
concrete.urls.paths.marketplace.connect_validate | /marketplace/connect/-/validate |
concrete.urls.paths.marketplace.connect_new_token | /marketplace/connect/-/generate_token |
concrete.urls.paths.marketplace.checkout | /cart/-/add |
concrete.urls.paths.marketplace.purchases | /marketplace/connect/-/get_available_licenses |
concrete.urls.paths.marketplace.item_information | /marketplace/connect/-/get_item_information |
concrete.urls.paths.marketplace.item_free_license | /marketplace/connect/-/enable_free_license |
concrete.urls.paths.marketplace.remote_item_list | /marketplace/ |
concrete.white_label.logo | false |
concrete.white_label.name | false |
concrete.white_label.background_image | null |
concrete.session.name | CONCRETE5 |
concrete.session.handler | file |
concrete.session.redis.database | 1 |
concrete.session.save_path | null |
concrete.session.max_lifetime | 7200 |
concrete.session.gc_probability | 1 |
concrete.session.gc_divisor | 100 |
concrete.session.cookie.cookie_path | false |
concrete.session.cookie.cookie_lifetime | 0 |
concrete.session.cookie.cookie_domain | false |
concrete.session.cookie.cookie_secure | false |
concrete.session.cookie.cookie_httponly | true |
concrete.session.cookie.cookie_raw | false |
concrete.session.cookie.cookie_samesite | null |
concrete.session.remember_me.lifetime | 1209600 |
concrete.user.registration.enabled | false |
concrete.user.registration.type | disabled |
concrete.user.registration.captcha | true |
concrete.user.registration.email_registration | false |
concrete.user.registration.display_username_field | true |
concrete.user.registration.display_confirm_password_field | true |
concrete.user.registration.validate_email | false |
concrete.user.registration.approval | false |
concrete.user.registration.notification | false |
concrete.user.group.badge.default_point_value | 50 |
concrete.user.username.maximum | 64 |
concrete.user.username.minimum | 3 |
concrete.user.username.allowed_characters.boundary | A-Za-z0-9 |
concrete.user.username.allowed_characters.middle | A-Za-z0-9_\. |
concrete.user.username.allowed_characters.requirement_string | A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end). |
concrete.user.username.allowed_characters.error_string | A username may only contain letters, numbers, dots (not at the beginning/end), and underscores (not at the beginning/end). |
concrete.user.password.maximum | 128 |
concrete.user.password.minimum | 5 |
concrete.user.password.required_special_characters | 0 |
concrete.user.password.required_lower_case | 0 |
concrete.user.password.required_upper_case | 0 |
concrete.user.password.reuse | 0 |
concrete.user.password.hash_portable | false |
concrete.user.password.hash_cost_log2 | 12 |
concrete.user.password.legacy_salt | |
concrete.user.email.test_mx_record | false |
concrete.user.email.strict | true |
concrete.user.private_messages.throttle_max | 20 |
concrete.user.private_messages.throttle_max_timespan | 15 |
concrete.user.deactivation.enable_login_threshold_deactivation | false |
concrete.user.deactivation.login.threshold | 120 |
concrete.user.deactivation.authentication_failure.enabled | false |
concrete.user.deactivation.authentication_failure.amount | 5 |
concrete.user.deactivation.authentication_failure.duration | 300 |
concrete.user.deactivation.message | This user is inactive. Please contact us regarding this account. |
concrete.spam.whitelist_group | 0 |
concrete.spam.notify_email | |
concrete.calendar.colors.text | #ffffff |
concrete.calendar.colors.background | #3A87AD |
concrete.security.session.invalidate_on_user_agent_mismatch | true |
concrete.security.session.invalidate_on_ip_mismatch | true |
concrete.security.session.invalidate_inactive_users.enabled | false |
concrete.security.session.invalidate_inactive_users.time | 300 |
concrete.security.misc.x_frame_options | SAMEORIGIN |
concrete.permissions.forward_to_login | true |
concrete.permissions.model | simple |
concrete.seo.exclude_words | a, an, as, at, before, but, by, for, from, is, in, into, like, of, off, on, onto, per, since, than, the, this, that, to, up, via, with |
concrete.seo.url_rewriting | false |
concrete.seo.url_rewriting_all | false |
concrete.seo.redirect_to_canonical_url | false |
concrete.seo.canonical_url | null |
concrete.seo.canonical_url_alternative | null |
concrete.seo.trailing_slash | false |
concrete.seo.title_format | %2$s :: %1$s |
concrete.seo.title_segment_separator | :: |
concrete.seo.page_path_separator | - |
concrete.seo.group_name_separator | / |
concrete.seo.segment_max_length | 128 |
concrete.seo.paging_string | ccm_paging_p |
concrete.statistics.track_downloads | true |
concrete.limits.sitemap_pages | 100 |
concrete.limits.delete_pages | 100 |
concrete.limits.copy_pages | 10 |
concrete.limits.page_search_index_batch | 200 |
concrete.limits.job_queue_batch | 10 |
concrete.limits.style_customizer.size_min | -50 |
concrete.limits.style_customizer.size_max | 200 |
concrete.page.search.always_reindex | false |
concrete.composer.idle_timeout | 1 |
concrete.api.enabled | false |
concrete.api.grant_types.client_credentials | true |
concrete.api.grant_types.authorization_code | true |
concrete.api.grant_types.password_credentials | false |
concrete.api.grant_types.refresh_token | true |
concrete.mutex.semaphore.priority | 100 |
concrete.mutex.semaphore.class | Concrete\Core\System\Mutex\SemaphoreMutex |
concrete.mutex.file_lock.priority | 50 |
concrete.mutex.file_lock.class | Concrete\Core\System\Mutex\FileLockMutex |
concrete.version_db_installed | 20200609145307 |
concrete.maintenance.version_job_page_num | 305 |
Key | Value |
LSPHP_ENABLE_USER_INI | on |
PATH | /usr/local/bin:/usr/bin:/bin |
TEMP | /tmp |
TMP | /tmp |
TMPDIR | /tmp |
PWD | / |
HTTP_ACCEPT | */* |
CONTENT_LENGTH | 0 |
HTTP_HOST | spacemakerscustomcabinetrynaples.com |
HTTP_REFERER | http://spacemakersusa.com/ |
HTTP_USER_AGENT | claudebot |
UNIQUE_ID | Zga8-5mYgNkSbaUEECwMOAAAAKU |
SCRIPT_URL | / |
SCRIPT_URI | http://spacemakerscustomcabinetrynaples.com/ |
USER_ID | 2360461 |
SERVER_SIGNATURE | |
SERVER_SOFTWARE | Apache |
SERVER_NAME | spacemakerscustomcabinetrynaples.com |
SERVER_ADDR | 107.180.57.7 |
SERVER_PORT | 80 |
REMOTE_ADDR | 44.223.70.167 |
DOCUMENT_ROOT | /home/surfjoe/public_html |
REQUEST_SCHEME | http |
CONTEXT_PREFIX | |
CONTEXT_DOCUMENT_ROOT | /home/surfjoe/public_html |
SERVER_ADMIN | webmaster@spacemakerscustomcabinetrynaples.com |
SCRIPT_FILENAME | /home/surfjoe/public_html/index.php |
REMOTE_PORT | 48250 |
SERVER_PROTOCOL | HTTP/1.1 |
REQUEST_METHOD | GET |
QUERY_STRING | |
REQUEST_URI | / |
SCRIPT_NAME | /index.php |
PHP_SELF | /index.php |
REQUEST_TIME_FLOAT | 1711717627.3986 |
REQUEST_TIME | 1711717627 |
Key | Value |
LSPHP_ENABLE_USER_INI | on |
PATH | /usr/local/bin:/usr/bin:/bin |
TEMP | /tmp |
TMP | /tmp |
TMPDIR | /tmp |
PWD | / |