/** * Prepares filesystem to be sure that everything is on place as expected * * @return void * @throws \Exception Is thrown if a server directory can't be created */ public function prepareFileSystem() { // load the directories $directories = $this->getDirectories(); // load user and group from system configuration $user = $this->getSystemConfiguration()->getUser(); $group = $this->getSystemConfiguration()->getGroup(); // check if the necessary directories already exists, if not, create them foreach (DirectoryKeys::getServerDirectoryKeysToBeCreated() as $directoryKey) { // prepare the path to the directory to be created $toBeCreated = $this->realpath($directories[$directoryKey]); // prepare the directory name and check if the directory already exists if (is_dir($toBeCreated) === false) { // if not, try to create it if (mkdir($toBeCreated, 0755, true) === false) { throw new \Exception(sprintf('Can\'t create necessary directory %s while starting application server', $toBeCreated)); } // set user/group specified from the system configuration if ($this->setUserRights(new \SplFileInfo($toBeCreated), $user, $group) === false) { throw new \Exception(sprintf('Can\'t switch user/group to %s/% for directory %s while starting application server', $user, $group, $toBeCreated)); } } } // check if specific directories has to be cleaned up on startup foreach (DirectoryKeys::getServerDirectoryKeysToBeCleanedUp() as $directoryKey) { // prepare the path to the directory to be cleaned up $toBeCleanedUp = $this->realpath($directories[$directoryKey]); // if the directory exists, clean it up if (is_dir($toBeCleanedUp)) { $this->cleanUpDir(new \SplFileInfo($toBeCleanedUp)); } } // check if needed files do exist and have the correct user rights $files = $this->getFiles(); foreach (FileKeys::getServerFileKeysToBeCreated() as $fileKeys) { // prepare the path to the file to be created $toBeCreated = $this->realpath($files[$fileKeys]); // touch the file (will lead to its creation if it does not exist by now) if (touch($toBeCreated) === false) { throw new \Exception(sprintf('Can\'t create necessary file %s while starting application server', $toBeCreated)); } else { chmod($toBeCreated, 0755); } // set user/group specified from the system configuration if ($this->setUserRight(new \SplFileInfo($toBeCreated), $user, $group) === false) { throw new \Exception(sprintf('Can\'t switch user/group to %s/% for file %s while starting application server', $user, $group, $toBeCreated)); } } }
/** * Returns the files to be created at first start. * * @return array The files to be created if necessary */ public function getFiles() { // initialize the array with the files $files = array(); // iterate over the file keys and read the configuration values foreach (FileKeys::getServerFileKeys() as $fileKey) { $files[$fileKey] = $this->getSystemConfiguration()->getParam($fileKey); } // return the array with the files return $files; }