2006-08-19 07:04:45 +00:00
< ? php
2017-04-26 12:29:22 +00:00
/* WARNING !
2013-04-03 08:28:21 +00: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 13:31:06 +00:00
2019-03-04 17:38:39 +00:00
function make_self_url () {
$proto = is_server_https () ? 'https' : 'http' ;
return $proto . '://' . $_SERVER [ " HTTP_HOST " ] . $_SERVER [ " REQUEST_URI " ];
}
2013-03-28 06:10:55 +00:00
function make_self_url_path () {
2020-12-12 15:47:10 +00:00
if ( ! isset ( $_SERVER [ " HTTP_HOST " ])) return false ;
2017-07-10 13:20:40 +00:00
$proto = is_server_https () ? 'https' : 'http' ;
2017-07-10 12:00:56 +00:00
$url_path = $proto . '://' . $_SERVER [ " HTTP_HOST " ] . parse_url ( $_SERVER [ " REQUEST_URI " ], PHP_URL_PATH );
2013-03-28 06:10:55 +00:00
return $url_path ;
}
2019-06-20 05:40:02 +00:00
function check_mysql_tables () {
$pdo = Db :: pdo ();
$sth = $pdo -> prepare ( " SELECT engine, table_name FROM information_schema.tables WHERE
table_schema = ? AND table_name LIKE 'ttrss_%' AND engine != 'InnoDB' " );
$sth -> execute ([ DB_NAME ]);
$bad_tables = [];
while ( $line = $sth -> fetch ()) {
array_push ( $bad_tables , $line );
}
return $bad_tables ;
}
/**
2017-04-26 12:29:22 +00:00
* @ SuppressWarnings ( PHPMD . UnusedLocalVariable )
*/
2013-04-17 12:23:15 +00:00
function initial_sanity_check () {
2010-12-21 06:29:07 +00:00
2012-05-17 08:23:14 +00:00
$errors = array ();
2010-12-21 06:29:07 +00:00
2012-05-17 08:23:14 +00: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 09:20:00 +00:00
2012-05-17 08:23:14 +00:00
require_once " sanity_config.php " ;
2006-08-20 10:27:25 +00:00
2013-03-26 18:38:05 +00: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/ " );
}
2020-09-17 16:02:27 +00:00
if ( strpos ( PLUGINS , " auth_ " ) === false ) {
2012-12-27 17:22:39 +00:00
array_push ( $errors , " Please enable at least one authentication module via PLUGINS constant in config.php " );
}
2012-05-17 08:23:14 +00:00
if ( function_exists ( 'posix_getuid' ) && posix_getuid () == 0 ) {
array_push ( $errors , " Please don't run this script as root. " );
}
2006-10-01 10:05:20 +00:00
2021-02-05 20:41:32 +00:00
if ( version_compare ( PHP_VERSION , '7.0.0' , '<' )) {
array_push ( $errors , " PHP version 7.0.0 or newer required. You're using " . PHP_VERSION . " . " );
2012-08-23 19:17:32 +00:00
}
2019-05-01 06:32:46 +00:00
if ( ! class_exists ( " UConverter " )) {
array_push ( $errors , " PHP UConverter class is missing, it's provided by the Internationalization (intl) module. " );
}
2012-05-17 08:23:14 +00:00
if ( CONFIG_VERSION != EXPECTED_CONFIG_VERSION ) {
2012-07-10 11:24:04 +00: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 08:23:14 +00:00
}
2006-10-01 10:05:20 +00:00
2012-05-17 08:23:14 +00:00
if ( ! is_writable ( CACHE_DIR . " /images " )) {
array_push ( $errors , " Image cache is not writable (chmod -R 777 " . CACHE_DIR . " /images) " );
}
2006-10-01 10:05:20 +00:00
2013-04-11 15:12:00 +00:00
if ( ! is_writable ( CACHE_DIR . " /upload " )) {
array_push ( $errors , " Upload cache is not writable (chmod -R 777 " . CACHE_DIR . " /upload) " );
}
2012-05-17 08:23:14 +00: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 15:20:26 +00:00
}
2006-10-01 10:05:20 +00:00
2012-05-17 08:23:14 +00: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 10:05:20 +00:00
2018-11-22 19:15:27 +00:00
foreach ( $required_defines as $d ) {
2012-05-17 08:23:14 +00:00
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 10:41:09 +00:00
if ( SINGLE_USER_MODE && class_exists ( " PDO " )) {
2020-09-17 06:18:03 +00:00
$pdo = Db :: pdo ();
2010-06-10 10:29:55 +00:00
2017-12-01 12:03:14 +00:00
$res = $pdo -> query ( " SELECT id FROM ttrss_users WHERE id = 1 " );
if ( ! $res -> fetch ()) {
2013-04-17 12:23:15 +00:00
array_push ( $errors , " SINGLE_USER_MODE is enabled in config.php but default admin account is not found. " );
2011-12-13 15:20:26 +00:00
}
2010-06-10 10:29:55 +00:00
}
2007-09-20 03:00:19 +00:00
2017-07-05 19:00:31 +00:00
$ref_self_url_path = make_self_url_path ();
2020-12-12 15:47:10 +00:00
if ( $ref_self_url_path ) {
$ref_self_url_path = preg_replace ( " / \ w+ \ .php $ / " , " " , $ref_self_url_path );
}
2013-03-28 06:10:55 +00:00
2017-07-05 19:00:31 +00:00
if ( SELF_URL_PATH == " http://example.org/tt-rss/ " ) {
2020-12-12 15:47:10 +00:00
$hint = $ref_self_url_path ? " (possible value: <b> $ref_self_url_path </b>) " : " " ;
2013-03-28 06:10:55 +00:00
array_push ( $errors ,
2021-02-05 20:41:32 +00:00
" Please set SELF_URL_PATH to the correct value for your server: $hint " );
2011-12-13 15:20:26 +00:00
}
2007-09-25 04:06:21 +00:00
2020-12-12 15:47:10 +00:00
if ( $ref_self_url_path &&
2017-07-06 19:51:56 +00:00
( ! defined ( '_SKIP_SELF_URL_PATH_CHECKS' ) || ! _SKIP_SELF_URL_PATH_CHECKS ) &&
2017-07-10 13:20:40 +00: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 19:07:41 +00:00
array_push ( $errors ,
2021-02-05 20:41:32 +00:00
" Please set SELF_URL_PATH to the correct value detected for your server: <b> $ref_self_url_path </b> (you're using: <b> " . SELF_URL_PATH . " </b>) " );
2017-07-05 19:07:41 +00:00
}
2017-07-05 19:00:31 +00:00
2017-07-05 19:07:41 +00:00
if ( ! is_writable ( ICONS_DIR )) {
2012-05-17 08:23:14 +00:00
array_push ( $errors , " ICONS_DIR defined in config.php is not writable (chmod -R 777 " . ICONS_DIR . " ). \n " );
}
2007-09-25 04:06:21 +00:00
2012-05-17 08:23:14 +00: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 05:38:56 +00:00
2012-05-17 08:23:14 +00: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 08:57:11 +00:00
2012-05-17 08:23:14 +00:00
if ( ! function_exists ( " json_encode " )) {
array_push ( $errors , " PHP support for JSON is required, but was not found. " );
}
2011-11-06 18:07:52 +00:00
2016-08-21 11:03:35 +00:00
if ( DB_TYPE == " mysql " && ! function_exists ( " mysqli_connect " )) {
2012-05-17 08:23:14 +00:00
array_push ( $errors , " PHP support for MySQL is required for configured DB_TYPE in config.php. " );
}
2010-11-01 09:18:06 +00:00
2012-05-17 08:23:14 +00: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 12:09:30 +00:00
2017-12-03 10:40:09 +00:00
if ( ! class_exists ( " PDO " )) {
2017-12-10 06:20:52 +00:00
array_push ( $errors , " PHP support for PDO is required but was not found. " );
2017-12-03 10:40:09 +00:00
}
2012-05-17 08:23:14 +00:00
if ( ! function_exists ( " mb_strlen " )) {
array_push ( $errors , " PHP support for mbstring functions is required but was not found. " );
}
2012-03-19 17:23:59 +00:00
2012-05-17 08:23:14 +00:00
if ( ! function_exists ( " hash " )) {
array_push ( $errors , " PHP support for hash() function is required but was not found. " );
}
2010-12-27 12:09:30 +00:00
2015-11-19 17:05:17 +00:00
if ( ini_get ( " safe_mode " )) {
array_push ( $errors , " PHP safe mode setting is obsolete and not supported by tt-rss. " );
2012-05-17 08:23:14 +00:00
}
2010-12-27 12:09:30 +00:00
2017-10-29 07:17:43 +00:00
if ( ! function_exists ( " mime_content_type " )) {
array_push ( $errors , " PHP function mime_content_type() is missing, try enabling fileinfo module. " );
}
2012-05-17 08:23:14 +00:00
if ( ! class_exists ( " DOMDocument " )) {
array_push ( $errors , " PHP support for DOMDocument is required, but was not found. " );
}
2017-11-27 17:09:02 +00: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 17:20:33 +00:00
Please backup your data ( via OPML ) and re - import the schema before continuing .</ p >
2017-11-27 17:09:02 +00:00
< p >< b > WARNING : importing the schema would mean LOSS OF ALL YOUR DATA .</ b ></ p > " ;
array_push ( $errors , $msg );
}
}
2011-12-13 15:20:26 +00:00
}
2011-10-18 06:44:23 +00:00
2012-05-17 08:23:14 +00:00
if ( count ( $errors ) > 0 && $_SERVER [ 'REQUEST_URI' ]) { ?>
2019-02-23 10:49:40 +00:00
<! DOCTYPE html >
2012-05-17 08:23:14 +00:00
< html >
< head >
< title > Startup failed </ title >
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " >
2020-02-22 13:22:44 +00:00
< link rel = " stylesheet " type = " text/css " href = " themes/light.css " >
2012-05-17 08:23:14 +00:00
</ head >
2017-12-03 10:25:34 +00:00
< body class = 'sanity_failed claro ttrss_utility' >
2013-03-27 06:59:26 +00:00
< div class = " content " >
2010-12-27 12:09:30 +00:00
2012-05-17 08:23:14 +00:00
< h1 > Startup failed </ h1 >
2011-04-01 05:42:15 +00:00
2012-05-17 08:23:14 +00: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 12:25:07 +00:00
2012-05-17 08:23:14 +00:00
< ? php foreach ( $errors as $error ) { echo format_error ( $error ); } ?>
2011-08-16 04:56:52 +00:00
2020-07-13 14:06:59 +00:00
< p > You might want to check tt - rss < a href = " https://tt-rss.org/wiki.php " > wiki </ a > or the
< a href = " https://community.tt-rss.org/ " > forums </ a > for more information . Please search the forums before creating new topic
2012-05-17 08:23:14 +00:00
for your question .</ p >
2013-03-27 06:59:26 +00:00
</ div >
2011-12-13 15:20:26 +00:00
</ body >
</ html >
2011-04-12 15:29:45 +00:00
2012-05-17 08:23:14 +00: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 11:11:55 +00:00
echo " \n You might want to check tt-rss wiki or the forums for more information. \n " ;
2012-05-17 08:23:14 +00:00
echo " Please search the forums before creating new topic for your question. \n " ;
exit ( - 1 );
}
2006-10-01 10:05:20 +00:00
}
2013-04-17 12:23:15 +00:00
initial_sanity_check ();
2012-05-17 08:23:14 +00:00
2005-11-23 17:20:17 +00:00
?>