2015-11-11 22:49:58 +01:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* Shaarli (application) utilities
|
|
|
|
*/
|
|
|
|
class ApplicationUtils
|
|
|
|
{
|
|
|
|
|
2015-11-24 01:36:12 +01:00
|
|
|
/**
|
|
|
|
* 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.'
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-11-11 22:49:58 +01:00
|
|
|
/**
|
|
|
|
* 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;
|
|
|
|
}
|
|
|
|
}
|