MINI is an extremely simple and easy to understand skeleton PHP application

Overview

MINI - A naked barebone PHP application

MINI

MINI is an extremely simple and easy to understand skeleton PHP application, reduced to the max. MINI is NOT a professional framework and it does not come with all the stuff real frameworks have. If you just want to show some pages, do a few database calls and a little-bit of AJAX here and there, without reading in massive documentations of highly complex professional frameworks, then MINI might be very useful for you. MINI is easy to install, runs nearly everywhere and doesn't make things more complicated than necessary.

For a deeper introduction into MINI have a look into this blog post: MINI, an extremely simple barebone PHP application.

Features

  • extremely simple, easy to understand
  • simple but clean structure
  • makes "beautiful" clean URLs
  • demo CRUD actions: Create, Read, Update and Delete database entries easily
  • demo AJAX call
  • tries to follow PSR 1/2 coding guidelines
  • uses PDO for any database requests, comes with an additional PDO debug tool to emulate your SQL statements
  • commented code
  • uses only native PHP code, so people don't have to learn a framework

Forks of MINI

TINY

MINI has a smaller brother, named TINY. It's similar to MINI, but runs without mod_rewrite in nearly every environment. Not suitable for live sites, but nice for quick prototyping.

MINI2

MINI also has a bigger brother, named MINI2. It's even simpler, has been built using Slim and has nice features like SASS-compiling, Twig etc.

MINI3

MINI3 it the successor of MINI, using the original MINI1 native application structure (without Slim under the hood), but with proper PSR-4 autoloading, multiple model classes and real namespaces.

Requirements

  • PHP 5.3.0+ (when first released), now it works fine with current stable versions PHP 5.6 and 7.1, 7.2., 7.3 and 7.4. The latest PHP 8.0 is not tested yet but should also work fine.
  • MySQL
  • mod_rewrite activated (tutorials below, but there's also TINY, a mod_rewrite-less version of MINI)

Installation (in Vagrant, 100% automatic)

If you are using Vagrant for your development, then you can install MINI with one click (or one command on the command line) [Vagrant doc]. MINI comes with a demo Vagrant-file (defines your Vagrant box) and a demo bootstrap.sh which automatically installs Apache, PHP, MySQL, PHPMyAdmin, git and Composer, sets a chosen password in MySQL and PHPMyadmin and even inside the application code, downloads the Composer-dependencies, activates mod_rewrite and edits the Apache settings, downloads the code from GitHub and runs the demo SQL statements (for demo data). This is 100% automatic, you'll end up after +/- 5 minutes with a fully running installation of MINI2 inside an Ubuntu 14.04 LTS Vagrant box.

To do so, put Vagrantfile and bootstrap.sh from _vagrant inside a folder (and nothing else). Do vagrant box add ubuntu/focal64 to add Ubuntu 20.04 LTS 64bit to Vagrant (unless you already have it), then do vagrant up to run the box. When installation is finished you can directly use the fully installed demo app on 192.168.33.44 (you can change this in the Vagrantfile). As this just a quick demo environment the MySQL root password and the PHPMyAdmin root password are set to 12345678, the project is installed in /var/www/html/myproject. You can change this for sure inside bootstrap.sh. Shut down the box with vagrant halt

Auto-Installation on Ubuntu 14.04 LTS (in 30 seconds)

You can install MINI including Apache, MySQL, PHP and PHPMyAdmin, mod_rewrite, Composer, all necessary settings and even the passwords inside the configs file by simply downloading one file and executing it, the entire installation will run 100% automatically. Find the tutorial in this blog article: Install MINI in 30 seconds inside Ubuntu 14.04 LTS

Installation

  1. Edit the database credentials in application/config/config.php
  2. Execute the .sql statements in the _install/-folder (with PHPMyAdmin for example).
  3. Make sure you have mod_rewrite activated on your server / in your environment. Some guidelines: Ubuntu 14.04 LTS, Ubuntu 12.04 LTS, EasyPHP on Windows, AMPPS on Windows/Mac OS, XAMPP for Windows, MAMP on Mac OS

MINI runs without any further configuration. You can also put it inside a sub-folder, it will work without any further configuration. Maybe useful: A simple tutorial on How to install LAMPP (Linux, Apache, MySQL, PHP, PHPMyAdmin) on Ubuntu 14.04 LTS and the same for Ubuntu 12.04 LTS.

Server configs for

nginx

server {
    server_name default_server _;   # Listen to any servername
    listen      [::]:80;
    listen      80;

    root /var/www/html/myproject/public;

    location / {
        index index.php;
        try_files /$uri /$uri/ /index.php?url=$uri;
    }

    location ~ \.(php)$ {
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

A deeper discussion on nginx setups can be found here.

Security

The script makes use of mod_rewrite and blocks all access to everything outside the /public folder. Your .git folder/files, operating system temp files, the application-folder and everything else is not accessible (when set up correctly). For database requests PDO is used, so no need to think about SQL injection (unless you are using extremely outdated MySQL versions).

Goodies

MINI comes with a little customized PDO debugger tool (find the code in application/libs/helper.php), trying to emulate your PDO-SQL statements. It's extremely easy to use:

db->prepare($sql); $parameters = array(':song_id' => $song_id); echo Helper::debugPDO($sql, $parameters); $query->execute($parameters);">
$sql = "SELECT id, artist, track, link FROM song WHERE id = :song_id LIMIT 1";
$query = $this->db->prepare($sql);
$parameters = array(':song_id' => $song_id);

echo Helper::debugPDO($sql, $parameters);

$query->execute($parameters);

Why has the "Error" class been renamed to "Problem"?

The project was written in PHP5 times, but with the release of PHP7 it's not possible anymore to name a class "Error" as PHP itself has a internal Error class now. Renaming was the most simple solution, compared to other options like "ErrorController" etc. which would add new problems like uppercase filenames etc. (which will not work properly on some setups).

License

This project is licensed under the MIT License. This means you can use and modify it for free in private or commercial projects.

My blog

And by the way, I'm also blogging at Dev Metal.

Quick-Start

The structure in general

The application's URL-path translates directly to the controllers (=files) and their methods inside application/controllers.

example.com/home/exampleOne will do what the exampleOne() method in application/controllers/home.php says.

example.com/home will do what the index() method in application/controllers/home.php says.

example.com will do what the index() method in application/controllers/home.php says (default fallback).

example.com/songs will do what the index() method in application/controllers/songs.php says.

example.com/songs/editsong/17 will do what the editsong() method in application/controllers/songs.php says and will pass 17 as a parameter to it.

Self-explaining, right ?

Showing a view

Let's look at the exampleOne()-method in the home-controller (application/controllers/home.php): This simply shows the header, footer and the example_one.php page (in views/home/). By intention as simple and native as possible.

public function exampleOne()
{
    // load view
    require APP . 'views/_templates/header.php';
    require APP . 'views/home/example_one.php';
    require APP . 'views/_templates/footer.php';
}

Working with data

Let's look into the index()-method in the songs-controller (application/controllers/songs.php): Similar to exampleOne, but here we also request data. Again, everything is extremely reduced and simple: $this->model->getAllSongs() simply calls the getAllSongs()-method in application/model/model.php.

public function index()
{
    // getting all songs and amount of songs
    $songs = $this->model->getAllSongs();
    $amount_of_songs = $this->model->getAmountOfSongs();

   // load view. within the view files we can echo out $songs and $amount_of_songs easily
    require APP . 'views/_templates/header.php';
    require APP . 'views/songs/index.php';
    require APP . 'views/_templates/footer.php';
}

For extreme simplicity, all data-handling methods are in application/model/model.php. This is for sure not really professional, but the most simple implementation. Have a look how getAllSongs() in model.php looks like: Pure and super-simple PDO.

db->prepare($sql); $query->execute(); return $query->fetchAll(); }">
public function getAllSongs()
{
    $sql = "SELECT id, artist, track, link FROM song";
    $query = $this->db->prepare($sql);
    $query->execute();
    
    return $query->fetchAll();
}

The result, here $songs, can then easily be used directly inside the view files (in this case application/views/songs/index.php, in a simplified example):

 foreach ($songs as $song) { ?>
    <tr>
        <td> if (isset($song->artist)) echo htmlspecialchars($song->artist, ENT_QUOTES, 'UTF-8'); ?>td>
        <td> if (isset($song->track)) echo htmlspecialchars($song->track, ENT_QUOTES, 'UTF-8'); ?>td>
    tr>  } ?> tbody>

History

MINI is the successor of php-mvc. As php-mvc didn't provide a real MVC structure (and several people complained about that - which is totally right!) I've renamed and rebuild the project.

Dear haters, trolls and everything-sucks-people...

... MINI is just a simple helper-tool I've created for my daily work, simply because it was much easier to setup and to handle than real frameworks. For daily agency work, quick prototyping and frontend-driven projects it's totally okay, does the job and there's absolutely no reason to discuss why it's "shit compared to Laravel", why it does not follow several MVC principles or why there's no personal unpaid support or no russian translation or similar weird stuff. The trolling against Open-Source-projects (and their authors) has really reached insane dimensions.

I've written this unpaid, voluntarily, in my free-time and uploaded it on GitHub to share. It's totally free, for private and commercial use. If you don't like it, don't use it. If you see issues, then please write a ticket (and if you are really cool: I'm very thankful for any commits!). But don't bash, don't complain, don't hate. Only bad people do so.

Contribute

Please commit into the develop branch (which holds the in-development version), not into master branch (which holds the tested and stable version).

Changelog

December 2002

  • [panique] updated Vagrant installer to run with PHP 7.4 and Ubuntu 20.04

August 2016

  • [codebicycle/panique] renamed Error class to Problem to make it PHP7 compatible #209
  • [ynohtna92/panique] URL protocol is now protocol-independent #208

February 2015

  • [jeroenseegers] nginx setup configuration

December 2014

  • [panique] css fixes
  • [panique] renamed controller / view to singular
  • [panique] added charset to PDO creation (increased security)

November 2014

  • [panique] auto-install script for Vagrant
  • [panique] basic documentation
  • [panique] PDO-debugger is now a static helper-method, not a global function anymore
  • [panique] folder renaming
  • [reg4in] JS AJAX calls runs now properly even when using script in sub-folder
  • [panique] removed all "models", using one model file now
  • [panique] full project renaming, re-branding

October 2014

  • [tarcnux/panique] PDO debugging
  • [panique] demo ajax call
  • [panique] better output escaping
  • [panique] renamed /libs to /core
  • [tarcnux] basic CRUD (create/read/update/delete) examples have now an U (update)
  • [panique] URL is now config-free, application detects URL and sub-folder
  • [elysdir] htaccess has some good explanation-comments now
  • [bst27] fallback for non-existing controller / method
  • [panique] fallback will show error-page now
  • [digitaltoast] URL split fix to make php-mvc work flawlessly on nginx
  • [AD7six] security improvement: moved index.php to /public, route ALL request to /public

September 2014

  • [panique] added link to support forum
  • [panique] added link to Facebook page

August 2014

  • [panique] several changes in the README, donate-button changes

June 2014

  • [digitaltoast] removed X-UA-Compatible meta tag from header (as it's not needed anymore these days)
  • [digitaltoast] removed protocol in jQuery URL (modern way to load external files, making it independent to protocol change)
  • [digitaltoast] downgraded jQuery from 2.1 to 1.11 to avoid problems when working with IE7/8 (jQuery 2 dropped IE7/8 support)
  • [panique] moved jQuery loading to footer (to avoid page render blocking)

April 2014

  • [panique] updated jQuery link to 2.1
  • [panique] more than 3 parameters (arguments to be concrete) are possible
  • [panique] cleaner way of parameter handling
  • [panique] smaller cleanings and improvements
  • [panique] Apache 2.4 install information

January 2014

  • [panique] fixed .htaccess issue when there's a controller named "index" and a base index.php (which collide)

Support the project

Rent your next server at 1&1 to support this open-source project.

Comments
  • [documentation] Can anyone help with nginx rewrites?

    [documentation] Can anyone help with nginx rewrites?

    Great looking and educational framework but I'm really struggling here and would appreciate any passing nginxexpers having a look.

    I've played with some other basic MVC frameworks and never had the problem where a normal nginx try_file wouldn't work.

    So, for example:

    location /manage/login {
         try_files $uri $uri/ /manage/login/index.php;
    }
    

    But, of course, I can see from the .htaccess and application.php that this uses ?url= GET arguments.

    So, 5 hours of reading http://wiki.nginx.org/HttpCoreModule#.24arg_PARAMETER and http://wiki.nginx.org/HttpCoreModule#.24args and http://nginx.org/en/docs/http/converting_rewrite_rules.html I've tried various of the following.... (the install folder is in manage/login

    location /manage/login { try_files $uri $uri/ /manage/login/index.php?url=$uri; }

    also

    try_files $uri $uri/ /manage/login/index.php?url=$uri; try_files $uri $uri/ /manage/login/index.php?url=$args; try_files $uri $uri/ /manage/login/index.php?url=$uri$args; try_files $uri $uri/ /manage/login/index.php?$args;

    and other combinations of the above. No matter what I put, it always says:

    You are in the controller home, using the method index() You are in the View: application/views/home/index.php

    I found another lost soul at http://forum.nginx.org/read.php?2,247614,247647#msg-247647 but again, he wasn't having much luck.

    opened by ghost 19
  • [DONE][security improvement] Possible edge case security issues

    [DONE][security improvement] Possible edge case security issues

    LITTLE NOTICE FROM PHP-MVC AUTHOR: Please don't panic, this ticket here shows some security issues that are indeed real, but php-mvc is on the same level of security like most mainstream PHP scripts in the world, like Wordpress, lots of CMS and major frameworks! The cases shown here are real, but these security "holes" can be found in most PHP scripts/installations in the world, including lots of popular sites.

    These security issues will be fixed within the next 14 days by a simple movement of the index.php and .htaccess changes, so you can update to the fixed version easily.

    Big thanks to @AD7six for the good information!


    This project is insecure

    Following on comments made to this SO question. If no other action comes from this ticket it would be wise to clarify beyond doubt the purpose of the repository as currently:

    • "it's a training thing for people to get into the very basics of MVC"
    • "People who [use this repository for real projects] should know what they do"

    Which is quite contradictory, it's for beginners who know what they are doing.

    The readme makes no mention of that; It is unfair to users who may choose this project for real applications to unwittingly find that the repository they have based their project on is infact fundamentally unsafe.


    Consider the following actions:

    ssh server
    git clone https://github.com/panique/php-mvc.git
    vim php-mvc/application/config/config.php
    

    Resulting in:

    $ tree php-mvc
    |-- CHANGELOG.md
    |-- README.md
    |-- _tutorial
    |   |-- donate-with-paypal.png
    |   |-- tutorial-part-01.png
    |   |-- tutorial-part-02.png
    |   |-- tutorial-part-03.png
    |   |-- tutorial-part-04.png
    |   `-- tutorial-part-05.png
    |-- application
    |   |-- _install
    |   |   |-- 01-create-database.sql
    |   |   |-- 02-create-table-song.sql
    |   |   `-- 03-insert-demo-data-into-table-song.sql
    |   |-- config
    |   |   |-- config.php
    |   |   `-- config.php~ # <---- an editor file.
    |   |-- controller
    |   |   |-- home.php
    |   |   `-- songs.php
    |   |-- libs
    |   |   |-- application.php
    |   |   `-- controller.php
    |   |-- models
    |   |   |-- songsmodel.php
    |   |   `-- statsmodel.php
    |   `-- views
    |       |-- _templates
    |       |   |-- footer.php
    |       |   `-- header.php
    |       |-- home
    |       |   |-- example_one.php
    |       |   |-- example_two.php
    |       |   `-- index.php
    |       `-- songs
    |           `-- index.php
    |-- composer.json
    |-- index.php
    `-- public
        |-- css
        |   `-- style.css
        |-- img
        |   `-- demo-image.png
        `-- js
            `-- application.js
    

    All application files are web accessible

    Absolutely all files are accessible in a php-mvc project. For all not-php files that means the source can be read directly. Example:

    $ curl http://example.com/php-mvc/composer.json
    {
        "name": "panique/php-mvc",
        "type": "project",
        "description": "A simple PHP MVC boilerplate",
    ...
    

    The problem is not limited to !php files, as most editors generate a tmp/swap/backup file any file that's edited on the server (or has noise uploaded - if it's deployed via ftp) is also accessible. In the example I gave a backup/swap file was generated for the config file, that file's contents are also now browsable:

    $ curl http://server/php-mvc/application/config/config.php~
    <?php
    
    /**
     * Configuration
     *
     * For more info about constants please @see http://php.net/manual/en/function.define.php
     * If you want to know why we use "define" instead of "const" @see http://stackoverflow.com/q/2447791/1114320
     */
    
    /**
     * Configuration for: Error reporting
     * Useful to show every little problem during development, but only show hard errors in production
     */
    error_reporting(E_ALL);
    ini_set("display_errors", 1);
    
    /**
     * Configuration for: Project URL
     * Put your URL here, for local development "127.0.0.1" or "localhost" (plus sub-folder) is fine
     */
    define('URL', 'http://127.0.0.1/php-mvc/');
    
    /**
     * Configuration for: Database
     * This is the place where you define your database credentials, database type etc.
     */
    define('DB_TYPE', 'mysql');
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'php-mvc');
    define('DB_USER', 'root');
    define('DB_PASS', 'mysql');
    

    The code is also browsable via the .git folder

    But the bad news doesn't stop there. You can also browse the .git folder if it is "deployed" with the application (if either the project is a checkout on the server, or the .git folder is uploaded via ftp):

    $ curl http://example.com/php-mvc/.git/config
    [core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
    [remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = https://github.com/panique/php-mvc.git
    [branch "master"]
        remote = origin
        merge = refs/heads/master
    

    In and of itself this may disclose sensitive information. Getting a valid response means that by looking around you can browse/download the whole git repo:

    $ curl http://example.com/php-mvc/.git/packed-refs
    # pack-refs with: peeled 
    2c7c8b01ea5904098bc5a7a22a93781082c8eacc refs/remotes/origin/master
    14b1162512b50d3ea0a71f8e0c501a7a30445bae refs/remotes/origin/develop
    
    etc.
    

    Solution

    It is trivial to prevent this; the only side effect being that the public folder is the only folder that is web accessible.

    • Move /index.php to /public/index.php

    • Move /.htaccess to /public/.htaccess

    • create a new root .htaccess file with the following contents:

      <IfModule mod_rewrite.c>
          RewriteEngine on
          RewriteRule    (.*) public/$1    [L]
      </IfModule>
      

    While I have no personal interest in using this project - I'd be grateful if you could address these problems to prevent inexperienced users trying to use it and inadvertently disclosing their application files to the public or worse losing their data etc.

    In addition I recommend taking a look at projects such as h5bp's apache config as it addresses these and many more common problems out of the box.

    opened by AD7six 18
  • (Question) Why the URL prefix when loading CSS?

    (Question) Why the URL prefix when loading CSS?

    Hi there!

    Any reason why you load the css as follows <link href="<?php echo URL; ?>public/css/style.css" rel="stylesheet">

    While it's also working like this <link href="public/css/style.css" rel="stylesheet">

    Thanks!

    opened by notflip 13
  • not existing path error

    not existing path error

    if i type http://localhost/mini-master/home/a which is not declared in home Class, it has an error "Fatal error: Cannot redeclare class Model in /Applications/XAMPP/xamppfiles/htdocs/mini-master/application/model/model.php on line 4"

    is it possible to redirect all not existing path back to root or index?

    opened by hatted 12
  • [NEEDS REPRODUCING] function splitURL does not preserve spaces that are url encoded

    [NEEDS REPRODUCING] function splitURL does not preserve spaces that are url encoded

    On https://github.com/panique/mini/blob/master/application/core/application.php#L72 this method is causing spaces that are encoded (%20) to be removed from the url. (No%20Space would become NoSpace)

    I have fixed it by replacing L72 with $url = str_replace('\/', ' ', filter_var(str_replace(' ', '\/', $url), FILTER_SANITIZE_URL)); however there is probably a better way to do this.

    opened by ynohtna92 10
  • [fork] new version of MINI that runs without modrewrite

    [fork] new version of MINI that runs without modrewrite

    The major "getting-started"-bottleneck in php-mvc is still to activate mod_rewrite, especially beginners have problems with that.

    Laravel - and other frameworks - does something very interesting: They have a fallback when no mod_rewrite is activated that makes the applicaiton work exactly like with mod_rewrite, except that you always have index.php inside your URL, like http://x.x.x.x/index.php/help/showArticle/17.

    I think php-mvc should do the same. Please have a look how to do this if you have some knowledge about this topic.

    Interesting read on SO: http://stackoverflow.com/questions/975262/pretty-urls-without-mod-rewrite-without-htaccess http://stackoverflow.com/questions/5629683/serverpath-info-and-serverorig-path-info-in-php

    Interesting file / behaviour in Laravel's root: https://github.com/laravel/laravel/blob/master/server.php

    PATH_INFO is used in both Symfony and ZF

    Quote from that file:

    // This file allows us to emulate Apache's "mod_rewrite" functionality from the
    // built-in PHP web server. This provides a convenient way to test a Laravel
    // application without having installed a "real" web server software here.
    

    As usual, please only commit into develop branch - never in master (it's only for stable public release). Or create a feature-branch (but I'm not sure if this is possible to easily in a public repo on GitHub).

    opened by panique 10
  • Allow for more than three params

    Allow for more than three params

    This has also reduced the amount of code required in the controller lib. I also did some basic speed testing and the changes don't seem to have impacted performance.

    If there's a reason you decided to only allow a maximum of three parameters that's fine :)

    opened by alexgarrettsmith 10
  • [potential features] how about a 2.0 version of this, with Twig, PHP-SASS, etc. ?

    [potential features] how about a 2.0 version of this, with Twig, PHP-SASS, etc. ?

    Hey people, as this barebone got quite good response and obviously is helpful, it might be useful to work on a "more advanced" version in 2014.

    Goals: Implement very useful web technologies in a ready-to-go way to encourage people to use them.

    UPDATE: This project will get an own repository, like php-mvc-advanced or similar

    For example "php-mvc 2" could implement:

    1.) SASS/Compass (the improved version of CSS) which compiles SCSS to CSS with PHP (http://leafo.net/scssphp/ does this, installable via Composer).

    2.) A view engine, like Twig (installable via Composer).

    3.) An ORM library (same here)?

    4.) A slim/laravel-like routes.php that basically replaces all controller files

    Feel free to add your ideas!

    opened by panique 10
  • [PROJECT FUTURE] make this a real php-boilerplate, perfect for starters

    [PROJECT FUTURE] make this a real php-boilerplate, perfect for starters

    As this projects gains a lot of popularity (which I have never even thought of) and seems to be useful for lots of people, I'm thinking about going a step further and creating some kind of php-boilerplate out of it.

    1. The web is full of excellent PHP-frameworks, and everybody who has the skills should use them, but:
    2. A very high number of developers (and non-developers!!) does not have the skill or the time or the nerve to read into frameworks to use them, and in so many cases frameworks and CMS are soooo overdozed. I'm especially looking at the enourmous amount of people who do mostly frontend and need a supersimple - but modern, easy and secure - backend architecture for doing just a few database calls etc.

    So, what problem does this solve ?

    So many people build applications (with PHP) completely from scratch, without having any idea of application structure, oop, mvc, clean architecture, clean code, PSR, etc. Just spend some minutes on stackoverflow or the local university and you know what i mean. php-boilerplate could give beginners (!) and advanced developers an easy-to-understand naked base application, easy to install, easy to maintain, to get started, and killing all the major problems a completely self-built structure introduces (including lots of security problems).

    Still not as good as a real framework, but 1000x better than the horrible mess of .php files we have all written back in the days.

    Beside, it makes people learn clean, dry oop code from the beginning, encourages them to use PSR guidelines, use PDO, use Composer, get a feeling for security, use comments in the way they should be used, learn git and continious deployment (which can be supereasy and setup-free) etc.

    What the difference to the current php-mvc project ?

    1. Making the current project much easier to install, eliminating as much server setup steps as possible
    2. Reducing the amount of configs
    3. Make this work out-of-the-box in any mainstream server config (all big OS, all servers (apache, nginx, iis))
    4. Detailed, but still compact and easy-to-understand documentation
    5. Massive tutorials
    6. Integrate all possible mainstream use cases (crud, search, pagination, ajax, json API [for all the heavy frontend-JS-apps], etc.
    7. Integrate introductions into git / deployment / workflows to guide people into the right direction.

    Maybe it even makes sense to collect money for this (via Kickstarter or getting supported by open-source-funding organizations etc.) !? This is just a first idea, but feel free to comment. I think this can be a very useful project.

    opened by panique 8
  • URL rewrite

    URL rewrite

    Hi,

    I just see that you are building url using structure "controller/action/param"

    I guess if someone else have already introduce url routing more flexible so we can easy override url without need to change controller and method name.

    Thanks!

    opened by macagoraga 8
  • Https problem

    Https problem

    Hello,

    I'm using your framework for a school project and I have an issue with the https request. My problem is here: https://46.101.127.220/ How you will see the site is messy and I don't know how to fix this. One of the requirements of the project is to have SSL and HTTPS requests. Can you help me to understand how to fix this? I don't know if I need to fix something in the HTACCESS or in the code directly. Please help me. Thank you, Jakub

    opened by Jakub41 7
  • moving mini from Apache to Nginx

    moving mini from Apache to Nginx

    I migrated from Apache to Nginx, and found the provided nginx config example only worked after changing the root from / to /public.

    This config worked as well:

    server {
            server_name servername.devops.local;
            listen [::]:80;
            listen 80;
    
            access_log /var/log/nginx/servername.devops.local.log;
            error_log /var/log/nginx/servername.devops.local.log;
    
            root /var/www/servername/public_html;
    
            location / {
                    index index.php;
                    try_files /public/$uri /public/$uri/ /public/index.php?url=$uri;
            }
    
            location ~ \.php$ {
                    fastcgi_pass unix:/run/php-fpm/www.sock;
                    fastcgi_index index.php;
                    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                    include fastcgi_params;
            }
    }
    
    AlmaLinux 8.6 (Sky Tiger) Linux 4.18.0-372.16.1.el8_6.x86_64
    nginx version: nginx/1.14.1
    PHP 8.1.8
    

    I'm posting this as an extension to conversation https://github.com/panique/mini/issues/55

    opened by rjCousineau 0
  • Need to set cron

    Need to set cron

    Currently, i have set cron with curl and wget but we need to set cron with PHP CLI. But this wat increases the load on the server. So please explain me how we set the controller as cron with PHP CLI.

    Waiting your responce Ankesh

    opened by ankeshibs 0
  • How to add controller/model for Login/Register

    How to add controller/model for Login/Register

    Hello, how can i add login / register function for the whole framework, i saw this sample module but it is not clear can it be added and if so how?

    I think this framework development is quite simple and needs a little more development :)

    https://github.com/panique/php-login-one-file

    opened by testt23 0
  • Nginx conf with $_GET params

    Nginx conf with $_GET params

    I noticed that if we try to set $_GET parameters, the configuration will have to be as follows to work:

    location / {
        try_files $uri $uri/ /index.php?url=$uri;        
        if ($args) {
            rewrite ^/(.+)$ /index.php?url=$1 last;
        }
    }
    

    Otherwise the framework does not take into account the parameters you pass, but only "url".

    opened by thisaurel 0
  • IIS web.config Error 404

    IIS web.config Error 404

    Hi everybody!

    My web server is IIS 7.5 and I'm trying to convert .htaccess files to web.config but I have a problem with the second web.config (in /public). The links in the menu get an Error 404.

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
           <rewrite>
              <rules>
                 <rule name="Main Rule" stopProcessing="true">
                     <match url="^(.+)$" ignoreCase="false" />
                      <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                       <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        </conditions>
                      <action type="Rewrite" url="index.php?url={R:1}" appendQueryString="true" />
                    </rule>
                </rules>
            </rewrite>
        </system.webServer>
    </configuration>
    

    The web.config file in / works well:

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <system.webServer>
           <rewrite>
    		  <rules>
    		     <rule name="public" stopProcessing="true">
                                <match url="^(.*)" ignoreCase="false" />
                                 <action type="Rewrite" url="public/{R:1}" />
                          </rule>
    		  </rules>
             </rewrite>
        </system.webServer>
    </configuration>
    

    Can someone help me with this or with the configuration for URL in config.php?

    Error details:

    IIS Web Core
    MapRequestHandler
    StaticFile
    0x80070002
    
    URL request: http://localhost:81/site/public/page1
    Path: C:\inetpub\wwwroot\site\public\page1
    

    Thank you!!!

    opened by aliciacbu 0
Owner
Chris
5.000+ ★ on GitHub. PHP dev, 10+ years of experience
Chris
mini Project in Laravel and vue js. Real World Laravel 8x + vue js Dashboard.Task management and project management system

mini Project in Laravel and vue js. Real World Laravel 8x + vue js Dashboard.Task management and project management system. Dashboard features such as: Complete Dashboard, Custom Authentication, Email Verification, custom-login-register-forgot password (without jetstream).

Hasmukh Dharajiya 2 Sep 20, 2022
This is mini project for online test with Face Camera detection and Anti Cheating

Online Test Script With Face Detection + Anti Cheating This is mini project that you can use this to make your own online test. This project include F

Ferry Ariawan 3 Jun 5, 2022
A mini social media like web app built using Laravel 8 & Vue JS 3

About Laravel Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experie

Davidson Ramos 2 Feb 1, 2022
This mini project aims to design a set of APIs that manage transactions of a company

Introduction. This mini project aims to design a set of APIs that manage transactions of a company.Managing transactions include: creating transaction

Omar Hossam Eldin Kandil 2 May 22, 2022
This application is a simple application to watch movies like Netflix or DisneyPlus.

Movie Streaming React Web Apps This application is a simple application to watch streaming movies like Netflix or DisneyPlus. The application is built

Adim 2 Sep 25, 2022
Pretty, simple and easy gallery

Auto Generating Gallery This is build with the awesome php framework Laravel 4. See the demo Pretty, simple and easy gallery. Upload albumfolder via f

Martin Dilling-Hansen 27 Oct 24, 2020
GistLog - simple, easy blogging based on GitHub gists

GistLog Turn your gists into easy, beautiful, responsive blog posts--each a "GistLog". Just paste a Gist URL into GistLog.co and you're up and running

Tighten 262 Dec 5, 2022
Damn Vulnerable Web Application (DVWA) is a PHP/MySQL web application that is damn vulnerable.

Damn Vulnerable Web Application (DVWA) is a PHP/MySQL web application that is damn vulnerable. Its main goal is to be an aid for security professionals to test their skills and tools in a legal environment, help web developers better understand the processes of securing web applications and to aid both students & teachers to learn about web application security in a controlled class room environment.

Robin Wood 7k Jan 5, 2023
TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application

TinyFileManager is web based file manager and it is a simple, fast and small file manager with a single file, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes.

Prasath Mani 3.5k Jan 7, 2023
A simple web application that demonstrates how to quickly connect to and communicate with a MariaDB database using PHP

PHP Quickstart This repository contains a simple web application that demonstrates how to quickly connect to and communicate with a MariaDB database u

Developer Code Central 8 Nov 6, 2022
Open source ERP software. Built on modern PHP and bootstrap 4. Easy and powerful.

FacturaScripts Open source ERP software. Built on modern PHP and bootstrap 4. Easy and powerful. Install Clone and deploy with composer and npm (compo

Carlos Garcia 313 Jan 4, 2023
Modern, Crazy Fast, Ridiculously Easy and Amazingly Powerful Flat-File CMS powered by PHP, Markdown, Twig, and Symfony

Grav Grav is a Fast, Simple, and Flexible, file-based Web-platform. There is Zero installation required. Just extract the ZIP archive, and you are alr

Grav 13.6k Dec 24, 2022
A simple, beautiful, mobile-first instant messaging web application backend build with ThinkPHP6 and Swoole.

OnChat A simple, beautiful, mobile-first instant messaging progressive web application build with ThinkPHP6 and Swoole. You can click here to view the

HyperLifelll9 138 Dec 26, 2022
Laravel Angular Time Tracker is a simple time tracking application built on Laravel 5.2, Angular 2, and Bootstrap 3.

Laravel 5.2, Angular 2, and Bootstrap 3.3.* Time Tracker Laravel Angular Time Tracker is a simple time tracking application built on Laravel 5.2, Angu

Jeremy Kenedy 25 Oct 11, 2022
Simple Laravel Invoice Generator Sling — open-source web application that helps you create invoices and track income.

Simple Laravel Invoice Generator Sling — open-source web application that helps you create invoices and track income. Table of Contents About

Ray Icemont 4 Nov 22, 2022
A great looking and easy-to-use photo-management-system you can run on your server, to manage and share photos.

Lychee A great looking and easy-to-use photo-management-system. Since the 1st of April 2018 this project has moved to it's own Organisation (https://g

Tobias Reich 6.2k Jan 5, 2023
Now Introducing a new and easy way to manage your clients and MyOwnFreeHost hosting accounts.

Warning This is a beta version of Xera. Use it for testing purpose only. You are be responsible for any loss or damages that may occor from using this

Mahtab Hassan 23 Dec 15, 2022
A simple web application for seeing a store's books. Built with Laravel 8 (a PHP Framework).

HappyBookStore Happy Book Store is a simple web application for seeing a store's books. As a user, you can look what book is available in the store by

Ananda Bilal 0 Jan 31, 2022
A flexible, elegant, fast and easy-to-use content management system written in PHP

Textpattern CMS A flexible, elegant, fast and easy-to-use content management system written in PHP. Textpattern is free and open source software.

Textpattern CMS 702 Jan 6, 2023