2006-08-19 07:04:45 +00:00
< ? php
2021-02-08 05:49:21 +00:00
/* WARNING! If you modify this file, you are ON YOUR OWN! */
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' " );
2021-02-22 18:47:48 +00:00
$sth -> execute ([ Config :: get ( Config :: DB_NAME )]);
2019-06-20 05:40:02 +00:00
$bad_tables = [];
while ( $line = $sth -> fetch ()) {
array_push ( $bad_tables , $line );
}
return $bad_tables ;
}
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
2021-02-12 12:59:19 +00:00
if ( ! file_exists ( " config.php " )) {
array_push ( $errors , " Please copy config.php-dist to config.php " );
2013-03-26 18:38:05 +00:00
}
2021-02-22 18:47:48 +00:00
if ( strpos ( Config :: get ( Config :: PLUGINS ), " auth_ " ) === false ) {
array_push ( $errors , " Please enable at least one authentication module via Config::get(Config::PLUGINS) constant in config.php " );
2012-12-27 17:22:39 +00:00
}
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. " );
}
2021-02-22 18:47:48 +00:00
if ( ! is_writable ( Config :: get ( Config :: CACHE_DIR ) . " /images " )) {
array_push ( $errors , " Image cache is not writable (chmod -R 777 " . Config :: get ( Config :: CACHE_DIR ) . " /images) " );
2012-05-17 08:23:14 +00:00
}
2006-10-01 10:05:20 +00:00
2021-02-22 18:47:48 +00:00
if ( ! is_writable ( Config :: get ( Config :: CACHE_DIR ) . " /upload " )) {
array_push ( $errors , " Upload cache is not writable (chmod -R 777 " . Config :: get ( Config :: CACHE_DIR ) . " /upload) " );
2012-05-17 08:23:14 +00:00
}
2006-10-01 10:05:20 +00:00
2021-02-22 18:47:48 +00:00
if ( ! is_writable ( Config :: get ( Config :: CACHE_DIR ) . " /export " )) {
array_push ( $errors , " Data export cache is not writable (chmod -R 777 " . Config :: get ( Config :: CACHE_DIR ) . " /export) " );
2013-04-11 15:12:00 +00:00
}
2021-02-22 18:47:48 +00:00
if ( Config :: get ( Config :: 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 ()) {
2021-02-22 18:47:48 +00:00
array_push ( $errors , " Config::get(Config::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
2021-02-08 05:49:21 +00:00
if ( php_sapi_name () != " cli " ) {
$ref_self_url_path = make_self_url_path ();
2020-12-12 15:47:10 +00:00
2021-02-08 05:49:21 +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
2021-02-22 18:47:48 +00:00
if ( Config :: get ( Config :: SELF_URL_PATH ) == " http://example.org/tt-rss/ " ) {
2021-02-08 05:49:21 +00:00
$hint = $ref_self_url_path ? " (possible value: <b> $ref_self_url_path </b>) " : " " ;
array_push ( $errors ,
2021-02-22 18:47:48 +00:00
" Please set Config::get(Config::SELF_URL_PATH) to the correct value for your server: $hint " );
2021-02-08 05:49:21 +00:00
}
2007-09-25 04:06:21 +00:00
2021-02-08 05:49:21 +00:00
if ( $ref_self_url_path &&
( ! defined ( '_SKIP_SELF_URL_PATH_CHECKS' ) || ! _SKIP_SELF_URL_PATH_CHECKS ) &&
2021-02-22 18:47:48 +00:00
Config :: get ( Config :: SELF_URL_PATH ) != $ref_self_url_path && Config :: get ( Config :: SELF_URL_PATH ) != mb_substr ( $ref_self_url_path , 0 , mb_strlen ( $ref_self_url_path ) - 1 )) {
2021-02-08 05:49:21 +00:00
array_push ( $errors ,
2021-02-22 18:47:48 +00:00
" Please set Config::get(Config::SELF_URL_PATH) to the correct value detected for your server: <b> $ref_self_url_path </b> (you're using: <b> " . Config :: get ( Config :: SELF_URL_PATH ) . " </b>) " );
2021-02-08 05:49:21 +00:00
}
2017-07-05 19:07:41 +00:00
}
2017-07-05 19:00:31 +00:00
2021-02-22 19:35:27 +00:00
if ( ! is_writable ( Config :: get ( Config :: ICONS_DIR ))) {
array_push ( $errors , " ICONS_DIR defined in config.php is not writable (chmod -R 777 " . Config :: get ( Config :: ICONS_DIR ) . " ). \n " );
2012-05-17 08:23:14 +00:00
}
2007-09-25 04:06:21 +00:00
2021-02-22 18:47:48 +00:00
if ( ! is_writable ( Config :: get ( Config :: LOCK_DIRECTORY ))) {
array_push ( $errors , " Config::get(Config::LOCK_DIRECTORY) defined in config.php is not writable (chmod -R 777 " . Config :: get ( Config :: LOCK_DIRECTORY ) . " ). \n " );
2012-05-17 08:23:14 +00:00
}
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
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
2021-02-22 18:47:48 +00:00
if ( Config :: get ( Config :: DB_TYPE ) == " mysql " ) {
2017-11-27 17:09:02 +00:00
$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
2021-02-08 05:49:21 +00:00
if ( count ( $errors ) > 0 && php_sapi_name () != " cli " ) { ?>
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 ) {
2021-02-08 05:49:21 +00:00
echo " * " . strip_tags ( $error ) . " \n " ;
2012-05-17 08:23:14 +00:00
}
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
?>