2006-08-19 09:04:45 +02:00
< ? php
2017-04-26 14:29:22 +02:00
/* WARNING !
2013-04-03 10:28:21 +02:00
*
* If you modify this file , you are ON YOUR OWN !
*
* Believe it or not , all of the checks below are required to succeed for
* tt - rss to actually function properly .
*
* If you think you have a better idea about what is or isn ' t required , feel
* free to modify the file , note though that you are therefore automatically
* disqualified from any further support by official channels , e . g . tt - rss . org
* issue tracker or the forums .
*
* If you come crying when stuff inevitably breaks , you will be mocked and told
* to get out . */
2012-11-04 14:31:06 +01:00
2013-03-28 07:10:55 +01:00
function make_self_url_path () {
2017-07-10 15:20:40 +02:00
$proto = is_server_https () ? 'https' : 'http' ;
2017-07-10 14:00:56 +02:00
$url_path = $proto . '://' . $_SERVER [ " HTTP_HOST " ] . parse_url ( $_SERVER [ " REQUEST_URI " ], PHP_URL_PATH );
2013-03-28 07:10:55 +01:00
return $url_path ;
}
2017-04-26 14:29:22 +02:00
/**
* @ SuppressWarnings ( PHPMD . UnusedLocalVariable )
*/
2013-04-17 14:23:15 +02:00
function initial_sanity_check () {
2010-12-21 07:29:07 +01:00
2012-05-17 10:23:14 +02:00
$errors = array ();
2010-12-21 07:29:07 +01:00
2012-05-17 10:23:14 +02:00
if ( ! file_exists ( " config.php " )) {
array_push ( $errors , " Configuration file not found. Looks like you forgot to copy config.php-dist to config.php and edit it. " );
} else {
2011-01-11 10:20:00 +01:00
2012-05-17 10:23:14 +02:00
require_once " sanity_config.php " ;
2006-08-20 12:27:25 +02:00
2013-03-26 19:38:05 +01:00
if ( file_exists ( " install " ) && ! file_exists ( " config.php " )) {
array_push ( $errors , " Please copy config.php-dist to config.php or run the installer in install/ " );
}
2012-12-27 18:22:39 +01:00
if ( strpos ( PLUGINS , " auth_ " ) === FALSE ) {
array_push ( $errors , " Please enable at least one authentication module via PLUGINS constant in config.php " );
}
2012-05-17 10:23:14 +02:00
if ( function_exists ( 'posix_getuid' ) && posix_getuid () == 0 ) {
array_push ( $errors , " Please don't run this script as root. " );
}
2006-10-01 12:05:20 +02:00
2015-12-04 17:03:57 +01:00
if ( version_compare ( PHP_VERSION , '5.4.0' , '<' )) {
array_push ( $errors , " PHP version 5.4.0 or newer required. " );
2012-08-23 21:17:32 +02:00
}
2012-05-17 10:23:14 +02:00
if ( CONFIG_VERSION != EXPECTED_CONFIG_VERSION ) {
2012-07-10 13:24:04 +02:00
array_push ( $errors , " Configuration file (config.php) has incorrect version. Update it with new options from config.php-dist and set CONFIG_VERSION to the correct value. " );
2012-05-17 10:23:14 +02:00
}
2006-10-01 12:05:20 +02:00
2012-05-17 10:23:14 +02:00
if ( ! is_writable ( CACHE_DIR . " /images " )) {
array_push ( $errors , " Image cache is not writable (chmod -R 777 " . CACHE_DIR . " /images) " );
}
2006-10-01 12:05:20 +02:00
2013-04-11 17:12:00 +02:00
if ( ! is_writable ( CACHE_DIR . " /upload " )) {
array_push ( $errors , " Upload cache is not writable (chmod -R 777 " . CACHE_DIR . " /upload) " );
}
2012-05-17 10:23:14 +02:00
if ( ! is_writable ( CACHE_DIR . " /export " )) {
array_push ( $errors , " Data export cache is not writable (chmod -R 777 " . CACHE_DIR . " /export) " );
2011-12-13 16:20:26 +01:00
}
2006-10-01 12:05:20 +02:00
2013-03-18 08:00:44 +01:00
if ( ! is_writable ( CACHE_DIR . " /js " )) {
array_push ( $errors , " Javascript cache is not writable (chmod -R 777 " . CACHE_DIR . " /js) " );
}
2013-04-13 16:32:57 +02:00
if ( strlen ( FEED_CRYPT_KEY ) > 0 && strlen ( FEED_CRYPT_KEY ) != 24 ) {
2013-04-13 16:24:27 +02:00
array_push ( $errors , " FEED_CRYPT_KEY should be exactly 24 characters in length. " );
}
2013-04-13 16:32:57 +02:00
if ( strlen ( FEED_CRYPT_KEY ) > 0 && ! function_exists ( " mcrypt_decrypt " )) {
2013-04-13 16:24:27 +02:00
array_push ( $errors , " FEED_CRYPT_KEY requires mcrypt functions which are not found. " );
}
2012-05-17 10:23:14 +02:00
if ( GENERATED_CONFIG_CHECK != EXPECTED_CONFIG_VERSION ) {
array_push ( $errors ,
" Configuration option checker sanity_config.php is outdated, please recreate it using ./utils/regen_config_checks.sh " );
}
2006-10-01 12:05:20 +02:00
2012-05-17 10:23:14 +02:00
foreach ( $requred_defines as $d ) {
if ( ! defined ( $d )) {
array_push ( $errors ,
" Required configuration file parameter $d is not defined in config.php. You might need to copy it from config.php-dist. " );
}
}
2017-12-03 11:41:09 +01:00
if ( SINGLE_USER_MODE && class_exists ( " PDO " )) {
2017-12-01 13:03:14 +01:00
$pdo = DB :: pdo ();
2010-06-10 12:29:55 +02:00
2017-12-01 13:03:14 +01:00
$res = $pdo -> query ( " SELECT id FROM ttrss_users WHERE id = 1 " );
if ( ! $res -> fetch ()) {
2013-04-17 14:23:15 +02:00
array_push ( $errors , " SINGLE_USER_MODE is enabled in config.php but default admin account is not found. " );
2011-12-13 16:20:26 +01:00
}
2010-06-10 12:29:55 +02:00
}
2007-09-20 05:00:19 +02:00
2017-07-05 21:00:31 +02:00
$ref_self_url_path = make_self_url_path ();
2017-07-05 21:07:41 +02:00
$ref_self_url_path = preg_replace ( " / \ w+ \ .php $ / " , " " , $ref_self_url_path );
2013-03-28 07:10:55 +01:00
2017-07-05 21:00:31 +02:00
if ( SELF_URL_PATH == " http://example.org/tt-rss/ " ) {
2013-03-28 07:10:55 +01:00
array_push ( $errors ,
2017-07-05 21:00:31 +02:00
" Please set SELF_URL_PATH to the correct value for your server (possible value: <b> $ref_self_url_path </b>) " );
2011-12-13 16:20:26 +01:00
}
2007-09-25 06:06:21 +02:00
2017-07-06 21:51:56 +02:00
if ( isset ( $_SERVER [ " HTTP_HOST " ]) &&
( ! defined ( '_SKIP_SELF_URL_PATH_CHECKS' ) || ! _SKIP_SELF_URL_PATH_CHECKS ) &&
2017-07-10 15:20:40 +02:00
SELF_URL_PATH != $ref_self_url_path && SELF_URL_PATH != mb_substr ( $ref_self_url_path , 0 , mb_strlen ( $ref_self_url_path ) - 1 )) {
2017-07-05 21:07:41 +02:00
array_push ( $errors ,
" Please set SELF_URL_PATH to the correct value detected for your server: <b> $ref_self_url_path </b> " );
}
2017-07-05 21:00:31 +02:00
2017-07-05 21:07:41 +02:00
if ( ! is_writable ( ICONS_DIR )) {
2012-05-17 10:23:14 +02:00
array_push ( $errors , " ICONS_DIR defined in config.php is not writable (chmod -R 777 " . ICONS_DIR . " ). \n " );
}
2007-09-25 06:06:21 +02:00
2012-05-17 10:23:14 +02:00
if ( ! is_writable ( LOCK_DIRECTORY )) {
array_push ( $errors , " LOCK_DIRECTORY defined in config.php is not writable (chmod -R 777 " . LOCK_DIRECTORY . " ). \n " );
}
2011-12-14 06:38:56 +01:00
2012-05-17 10:23:14 +02:00
if ( ! function_exists ( " curl_init " ) && ! ini_get ( " allow_url_fopen " )) {
array_push ( $errors , " PHP configuration option allow_url_fopen is disabled, and CURL functions are not present. Either enable allow_url_fopen or install PHP extension for CURL. " );
}
2010-06-30 10:57:11 +02:00
2012-05-17 10:23:14 +02:00
if ( ! function_exists ( " json_encode " )) {
array_push ( $errors , " PHP support for JSON is required, but was not found. " );
}
2011-11-06 19:07:52 +01:00
2016-08-21 13:03:35 +02:00
if ( DB_TYPE == " mysql " && ! function_exists ( " mysqli_connect " )) {
2012-05-17 10:23:14 +02:00
array_push ( $errors , " PHP support for MySQL is required for configured DB_TYPE in config.php. " );
}
2010-11-01 10:18:06 +01:00
2012-05-17 10:23:14 +02:00
if ( DB_TYPE == " pgsql " && ! function_exists ( " pg_connect " )) {
array_push ( $errors , " PHP support for PostgreSQL is required for configured DB_TYPE in config.php " );
}
2010-12-27 13:09:30 +01:00
2017-12-03 11:40:09 +01:00
if ( ! class_exists ( " PDO " )) {
array_push ( $errors , " PHP support for PDO (Portable Data Objects) is required but was not found. " );
}
2012-05-17 10:23:14 +02:00
if ( ! function_exists ( " mb_strlen " )) {
array_push ( $errors , " PHP support for mbstring functions is required but was not found. " );
}
2012-03-19 18:23:59 +01:00
2012-05-17 10:23:14 +02:00
if ( ! function_exists ( " hash " )) {
array_push ( $errors , " PHP support for hash() function is required but was not found. " );
}
2010-12-27 13:09:30 +01:00
2015-11-19 18:05:17 +01:00
if ( ini_get ( " safe_mode " )) {
array_push ( $errors , " PHP safe mode setting is obsolete and not supported by tt-rss. " );
2012-05-17 10:23:14 +02:00
}
2010-12-27 13:09:30 +01:00
2017-10-29 08:17:43 +01:00
if ( ! function_exists ( " mime_content_type " )) {
array_push ( $errors , " PHP function mime_content_type() is missing, try enabling fileinfo module. " );
}
2012-05-17 10:23:14 +02:00
if ( ! class_exists ( " DOMDocument " )) {
array_push ( $errors , " PHP support for DOMDocument is required, but was not found. " );
}
2017-11-27 18:09:02 +01:00
if ( DB_TYPE == " mysql " ) {
$bad_tables = check_mysql_tables ();
if ( count ( $bad_tables ) > 0 ) {
$bad_tables_fmt = [];
foreach ( $bad_tables as $bt ) {
array_push ( $bad_tables_fmt , sprintf ( " %s (%s) " , $bt [ 'table_name' ], $bt [ 'engine' ]));
}
$msg = " <p>The following tables use an unsupported MySQL engine: <b> " .
implode ( " , " , $bad_tables_fmt ) . " </b>.</p> " ;
$msg .= " <p>The only supported engine on MySQL is InnoDB. MyISAM lacks functionality to run
tt - rss .
2017-11-27 18:20:33 +01:00
Please backup your data ( via OPML ) and re - import the schema before continuing .</ p >
2017-11-27 18:09:02 +01:00
< p >< b > WARNING : importing the schema would mean LOSS OF ALL YOUR DATA .</ b ></ p > " ;
array_push ( $errors , $msg );
}
}
2011-12-13 16:20:26 +01:00
}
2011-10-18 08:44:23 +02:00
2012-05-17 10:23:14 +02:00
if ( count ( $errors ) > 0 && $_SERVER [ 'REQUEST_URI' ]) { ?>
< html >
< head >
< title > Startup failed </ title >
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " >
2017-12-03 11:25:34 +01:00
< link rel = " stylesheet " type = " text/css " href = " css/default.css " >
2012-05-17 10:23:14 +02:00
</ head >
2017-12-03 11:25:34 +01:00
< body class = 'sanity_failed claro ttrss_utility' >
2013-03-27 07:59:26 +01:00
< div class = " floatingLogo " >< img src = " images/logo_small.png " ></ div >
< div class = " content " >
2010-12-27 13:09:30 +01:00
2012-05-17 10:23:14 +02:00
< h1 > Startup failed </ h1 >
2011-04-01 07:42:15 +02:00
2012-05-17 10:23:14 +02:00
< p > Tiny Tiny RSS was unable to start properly . This usually means a misconfiguration or an incomplete upgrade . Please fix
errors indicated by the following messages :</ p >
2011-04-05 14:25:07 +02:00
2012-05-17 10:23:14 +02:00
< ? php foreach ( $errors as $error ) { echo format_error ( $error ); } ?>
2011-08-16 06:56:52 +02:00
2012-05-17 10:23:14 +02:00
< p > You might want to check tt - rss < a href = " http://tt-rss.org/wiki " > wiki </ a > or the
< a href = " http://tt-rss.org/forum " > forums </ a > for more information . Please search the forums before creating new topic
for your question .</ p >
2013-03-27 07:59:26 +01:00
</ div >
2011-12-13 16:20:26 +01:00
</ body >
</ html >
2011-04-12 17:29:45 +02:00
2012-05-17 10:23:14 +02:00
< ? php
die ;
} else if ( count ( $errors ) > 0 ) {
echo " Tiny Tiny RSS was unable to start properly. This usually means a misconfiguration or an incomplete upgrade. \n " ;
echo " Please fix errors indicated by the following messages: \n \n " ;
foreach ( $errors as $error ) {
echo " * $error\n " ;
}
2012-07-10 13:11:55 +02:00
echo " \n You might want to check tt-rss wiki or the forums for more information. \n " ;
2012-05-17 10:23:14 +02:00
echo " Please search the forums before creating new topic for your question. \n " ;
exit ( - 1 );
}
2006-10-01 12:05:20 +02:00
}
2013-04-17 14:23:15 +02:00
initial_sanity_check ();
2012-05-17 10:23:14 +02:00
2005-11-23 18:20:17 +01:00
?>