<?php /** * Shaarli (application) utilities */ class ApplicationUtils { /** * Checks the PHP version to ensure Shaarli can run * * @param string $minVersion minimum PHP required version * @param string $curVersion current PHP version (use PHP_VERSION) * * @throws Exception the PHP version is not supported */ public static function checkPHPVersion($minVersion, $curVersion) { if (version_compare($curVersion, $minVersion) < 0) { throw new Exception( 'Your PHP version is obsolete!' .' Shaarli requires at least PHP '.$minVersion.', and thus cannot run.' .' Your PHP version has known security vulnerabilities and should be' .' updated as soon as possible.' ); } } /** * Checks Shaarli has the proper access permissions to its resources * * @param array $globalConfig The $GLOBALS['config'] array * * @return array A list of the detected configuration issues */ public static function checkResourcePermissions($globalConfig) { $errors = array(); // Check script and template directories are readable foreach (array( 'application', 'inc', 'plugins', $globalConfig['RAINTPL_TPL'] ) as $path) { if (! is_readable(realpath($path))) { $errors[] = '"'.$path.'" directory is not readable'; } } // Check cache and data directories are readable and writeable foreach (array( $globalConfig['CACHEDIR'], $globalConfig['DATADIR'], $globalConfig['PAGECACHE'], $globalConfig['RAINTPL_TMP'] ) as $path) { if (! is_readable(realpath($path))) { $errors[] = '"'.$path.'" directory is not readable'; } if (! is_writable(realpath($path))) { $errors[] = '"'.$path.'" directory is not writable'; } } // Check configuration files are readable and writeable foreach (array( $globalConfig['CONFIG_FILE'], $globalConfig['DATASTORE'], $globalConfig['IPBANS_FILENAME'], $globalConfig['LOG_FILE'], $globalConfig['UPDATECHECK_FILENAME'] ) as $path) { if (! is_file(realpath($path))) { # the file may not exist yet continue; } if (! is_readable(realpath($path))) { $errors[] = '"'.$path.'" file is not readable'; } if (! is_writable(realpath($path))) { $errors[] = '"'.$path.'" file is not writable'; } } return $errors; } }