diff --git a/.htaccess b/.htaccess index d6a43797..3050e2e7 100644 --- a/.htaccess +++ b/.htaccess @@ -17,8 +17,8 @@ # rather than link to images/ha/hash and have an ugly filename, # we link to images/hash/tags.ext; mod_rewrite splits things so # that shimmie sees hash and the user sees tags.ext - RewriteRule ^_images/([0-9a-f]{2})([0-9a-f]{30}).*$ images/$1/$1$2 [L] - RewriteRule ^_thumbs/([0-9a-f]{2})([0-9a-f]{30}).*$ thumbs/$1/$1$2 [L] + RewriteRule ^_images/([0-9a-f]{2})([0-9a-f]{30}).*$ data/images/$1/$1$2 [L] + RewriteRule ^_thumbs/([0-9a-f]{2})([0-9a-f]{30}).*$ data/thumbs/$1/$1$2 [L] # any requests for files which don't physically exist should be handled by index.php RewriteCond %{REQUEST_FILENAME} !-f diff --git a/.travis.yml b/.travis.yml index db087aa9..4d7dea99 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,6 @@ language: php php: - - 7.1 - - 7.2 + - 7.0 sudo: false diff --git a/README.markdown b/README.markdown index 4b60f8ad..e8271f0f 100644 --- a/README.markdown +++ b/README.markdown @@ -29,7 +29,7 @@ check out one of the versioned branches. # Requirements - MySQL/MariaDB 5.1+ (with experimental support for PostgreSQL 9+ and SQLite 3) -- [Stable PHP](https://en.wikipedia.org/wiki/PHP#Release_history) (7.1+ as of writing) +- [Stable PHP](https://en.wikipedia.org/wiki/PHP#Release_history) (7.0+ as of writing) - GD or ImageMagick # Installation @@ -50,6 +50,24 @@ check out one of the versioned branches. 4. Run `composer install` in the shimmie folder. 5. Follow instructions noted in "Installation" starting from step 3. +# Docker + +Useful for testing in a known-good environment, this command will build a simple debian image and run all the unit tests inside it: + +``` +docker build -t shimmie . +``` + +Once you have an image which has passed all tests, you can then run it to get a live system: + +``` +docker run -p 0.0.0.0:8123:8000 shimmie +``` + +Then you can visit your server on port 8123 to see the site. + +Note that the docker image is entirely self-contained and has no persistence (assuming you use the sqlite database); each `docker run` will give a clean un-installed image. + ### Upgrade from earlier versions I very much recommend going via each major release in turn (eg, 2.0.6 diff --git a/composer.json b/composer.json index 509164c6..5b91691f 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ ], "require" : { - "php" : ">=7.1", + "php" : ">=7.0", "ext-pdo": "*", "flexihash/flexihash" : "^2.0.0", diff --git a/core/_install.php b/core/_install.php index d8971fc0..2b0a4eb3 100644 --- a/core/_install.php +++ b/core/_install.php @@ -108,8 +108,9 @@ function do_install() { // {{{ if(file_exists("data/config/auto_install.conf.php")) { require_once "data/config/auto_install.conf.php"; } - else if(@$_POST["database_type"] == "sqlite" && isset($_POST["database_name"])) { - define('DATABASE_DSN', "sqlite:{$_POST["database_name"]}"); + else if(@$_POST["database_type"] == "sqlite") { + $id = bin2hex(random_bytes(5)); + define('DATABASE_DSN', "sqlite:data/shimmie.{$id}.sqlite"); } else if(isset($_POST['database_type']) && isset($_POST['database_host']) && isset($_POST['database_user']) && isset($_POST['database_name'])) { define('DATABASE_DSN', "{$_POST['database_type']}:user={$_POST['database_user']};password={$_POST['database_password']};host={$_POST['database_host']};dbname={$_POST['database_name']}"); @@ -153,7 +154,6 @@ function ask_questions() { // {{{ if( !in_array("mysql", $drivers) && !in_array("pgsql", $drivers) && - !in_array("sqlite", $drivers) ) { $errors[] = " @@ -201,7 +201,7 @@ function ask_questions() { // {{{ Password: - + DB Name: @@ -360,29 +360,22 @@ function insert_defaults() { // {{{ function build_dirs() { // {{{ // *try* and make default dirs. Ignore any errors -- // if something is amiss, we'll tell the user later - if(!file_exists("images")) @mkdir("images"); - if(!file_exists("thumbs")) @mkdir("thumbs"); - if(!file_exists("data") ) @mkdir("data"); - if(!is_writable("images")) @chmod("images", 0755); - if(!is_writable("thumbs")) @chmod("thumbs", 0755); - if(!is_writable("data") ) @chmod("data", 0755); + if(!file_exists("data")) @mkdir("data"); + if(!is_writable("data")) @chmod("data", 0755); // Clear file status cache before checking again. clearstatcache(); - if( - !file_exists("images") || !file_exists("thumbs") || !file_exists("data") || - !is_writable("images") || !is_writable("thumbs") || !is_writable("data") - ) { + if(!file_exists("data") || !is_writable("data")) { print "

Shimmie Installer

Directory Permissions Error:

-

Shimmie needs to make three folders in it's directory, 'images', 'thumbs', and 'data', and they need to be writable by the PHP user.

-

If you see this error, if probably means the folders are owned by you, and they need to be writable by the web server.

+

Shimmie needs to have a 'data' folder in its directory, writable by the PHP user.

+

If you see this error, if probably means the folder is owned by you, and it needs to be writable by the web server.

PHP reports that it is currently running as user: ".$_ENV["USER"]." (". $_SERVER["USER"] .")

-

Once you have created these folders and / or changed the ownership of the shimmie folder, hit 'refresh' to continue.

+

Once you have created this folder and / or changed the ownership of the shimmie folder, hit 'refresh' to continue.



diff --git a/core/sys_config.php b/core/sys_config.php index 6ae38347..891840db 100644 --- a/core/sys_config.php +++ b/core/sys_config.php @@ -40,7 +40,7 @@ _d("TIMEZONE", null); // string timezone _d("CORE_EXTS", "bbcode,user,mail,upload,image,view,handle_pixel,ext_manager,setup,upgrade,handle_404,comment,tag_list,index,tag_edit,alias_editor"); // extensions to always enable _d("EXTRA_EXTS", ""); // string optional extra extensions _d("BASE_URL", null); // string force a specific base URL (default is auto-detect) -_d("MIN_PHP_VERSION", '7.1');// string minimum supported PHP version +_d("MIN_PHP_VERSION", '7.0');// string minimum supported PHP version _d("ENABLED_MODS", "imageboard"); /* diff --git a/core/util.php b/core/util.php index d611aa88..cd06b8d9 100644 --- a/core/util.php +++ b/core/util.php @@ -182,10 +182,10 @@ function warehouse_path(string $base, string $hash, bool $create=true): string { $ab = substr($hash, 0, 2); $cd = substr($hash, 2, 2); if(WH_SPLITS == 2) { - $pa = $base.'/'.$ab.'/'.$cd.'/'.$hash; + $pa = 'data/'.$base.'/'.$ab.'/'.$cd.'/'.$hash; } else { - $pa = $base.'/'.$ab.'/'.$hash; + $pa = 'data/'.$base.'/'.$ab.'/'.$hash; } if($create && !file_exists(dirname($pa))) mkdir(dirname($pa), 0755, true); return $pa; diff --git a/index.php b/index.php index b944e3eb..4aedff09 100644 --- a/index.php +++ b/index.php @@ -48,6 +48,10 @@ if(!file_exists("data/config/shimmie.conf.php")) { exit; } +if(file_exists("images") && !file_exists("data/images")) { + die("As of Shimmie 2.7 images and thumbs should be moved to data/images and data/thumbs"); +} + if(!file_exists("vendor/")) { //CHECK: Should we just point to install.php instead? Seems unsafe though. print <<