├── app ├── config │ ├── routing.yml │ ├── config_prod.yml │ ├── config_test.yml │ ├── routing_dev.yml │ ├── config_dev.yml │ ├── config.yml │ ├── security.yml.dist │ └── config.yml.dist ├── .htaccess ├── cache │ └── .htaccess ├── logs │ └── .htaccess ├── AppCache.php ├── views │ └── base.html.twig ├── console ├── autoload.php ├── phpunit.xml.dist ├── AppKernel.php └── check.php ├── bin ├── .htaccess └── init-submodule.sh ├── src └── .htaccess ├── web ├── favicon.ico ├── .htaccess ├── app_cache.php ├── app.php └── app_dev.php ├── .gitignore.dist ├── .gitmodules.dist ├── LICENSE ├── README.md └── .gitmodules.full.dist /app/config/routing.yml: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /bin/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /src/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /app/cache/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /app/logs/.htaccess: -------------------------------------------------------------------------------- 1 | deny from all -------------------------------------------------------------------------------- /app/config/config_prod.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | -------------------------------------------------------------------------------- /web/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KnpLabs/symfony-light/HEAD/web/favicon.ico -------------------------------------------------------------------------------- /.gitignore.dist: -------------------------------------------------------------------------------- 1 | web/bundles/ 2 | app/cache/* 3 | app/logs/* 4 | app/config/*_local.yml 5 | -------------------------------------------------------------------------------- /web/.htaccess: -------------------------------------------------------------------------------- 1 | 2 | RewriteEngine On 3 | RewriteCond %{REQUEST_FILENAME} !-f 4 | RewriteRule ^(.*)$ app.php [QSA,L] 5 | 6 | -------------------------------------------------------------------------------- /app/AppCache.php: -------------------------------------------------------------------------------- 1 | handle(Request::createFromGlobals())->send(); 12 | -------------------------------------------------------------------------------- /web/app.php: -------------------------------------------------------------------------------- 1 | handle(Request::createFromGlobals())->send(); 13 | -------------------------------------------------------------------------------- /app/config/config_dev.yml: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: config.yml } 3 | 4 | framework: 5 | router: { resource: "%kernel.root_dir%/config/routing_dev.yml" } 6 | profiler: { only_exceptions: false } 7 | 8 | web_profiler: 9 | toolbar: true 10 | intercept_redirects: false 11 | 12 | monolog: 13 | handlers: 14 | main: 15 | type: stream 16 | path: %kernel.logs_dir%/%kernel.environment%.log 17 | level: debug 18 | -------------------------------------------------------------------------------- /app/views/base.html.twig: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {% block title %}Welcome!{% endblock %} 6 | {% block stylesheets %}{% endblock %} 7 | 8 | 9 | 10 | {% block body %}{% endblock %} 11 | {% block javascripts %}{% endblock %} 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/config/config.yml: -------------------------------------------------------------------------------- 1 | 2 | framework: 3 | charset: UTF-8 4 | router: { resource: "%kernel.root_dir%/config/routing.yml" } 5 | validation: true 6 | templating: { engines: ['twig'] } #assets_version: SomeVersionScheme 7 | session: 8 | lifetime: 3600 9 | auto_start: true 10 | secret: xxxxxxxxx # you may change it 11 | 12 | # Twig Configuration 13 | twig: 14 | debug: %kernel.debug% 15 | strict_variables: %kernel.debug% 16 | 17 | -------------------------------------------------------------------------------- /app/console: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env php 2 | getParameterOption(array('--env', '-e'), 'dev'); 12 | $debug = !$input->hasParameterOption(array('--no-debug', '')); 13 | 14 | $kernel = new AppKernel($env, $debug); 15 | $application = new Application($kernel); 16 | $application->run(); 17 | -------------------------------------------------------------------------------- /web/app_dev.php: -------------------------------------------------------------------------------- 1 | handle(Request::createFromGlobals())->send(); 16 | -------------------------------------------------------------------------------- /bin/init-submodule.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | file=$1 4 | if [ -z "$file" ]; then 5 | file=".gitmodules.dist" 6 | fi 7 | 8 | for cfg in `git config -f $file -l` 9 | do 10 | if [ -n "$path" ] && [ -z "$url" ]; then 11 | url=`echo $cfg | awk -F"submodule.*.url=" '{print $2}'` 12 | elif [ -n "$path" ] && [ -n "$url" ] && [ -z "$version" ]; then 13 | version=`echo $cfg | awk -F"submodule.*.version=" '{print $2}'` 14 | else 15 | path=`echo $cfg | awk -F"submodule.*.path=" '{print $2}'` 16 | fi 17 | 18 | if [ -n "$url" ] && [ -n "$path" ] && [ -n "$version" ]; then 19 | if [ -n "$2" ]; then 20 | git clone --depth $2 $url $path 21 | fi 22 | git submodule add $url $path 23 | 24 | if [ -n "$version" ]; then 25 | cd $path 26 | git checkout $version 27 | cd - 28 | fi 29 | 30 | url="" 31 | path="" 32 | version="" 33 | fi 34 | done 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2004-2010 Fabien Potencier 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is furnished 8 | to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /app/autoload.php: -------------------------------------------------------------------------------- 1 | registerNamespaces(array( 9 | 'Symfony' => array(__DIR__.'/../vendor/symfony/src', __DIR__.'/../vendor/bundles'), 10 | 'Monolog' => __DIR__.'/../vendor/monolog/src', 11 | //'Assetic' => __DIR__.'/../vendor/assetic/src', 12 | //'Sensio' => __DIR__.'/../vendor/bundles', 13 | //'JMS' => __DIR__.'/../vendor/bundles', 14 | //'Doctrine\\Common' => __DIR__.'/../vendor/doctrine-common/lib', 15 | //'Doctrine\\DBAL' => __DIR__.'/../vendor/doctrine-dbal/lib', 16 | //'Doctrine' => __DIR__.'/../vendor/doctrine/lib', 17 | )); 18 | $loader->registerPrefixes(array( 19 | //'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib', 20 | 'Twig_' => __DIR__.'/../vendor/twig/lib', 21 | //'Swift_' => __DIR__.'/../vendor/swiftmailer/lib/classes', 22 | )); 23 | $loader->register(); 24 | -------------------------------------------------------------------------------- /app/config/security.yml.dist: -------------------------------------------------------------------------------- 1 | security: 2 | encoders: 3 | Symfony\Component\Security\Core\User\User: plaintext 4 | 5 | providers: 6 | in_memory: 7 | users: 8 | user: { password: userpass, roles: [ 'ROLE_USER' ] } 9 | admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } 10 | 11 | firewalls: 12 | profiler: 13 | pattern: /_profiler.* 14 | security: false 15 | 16 | wdt: 17 | pattern: /_wdt.* 18 | security: false 19 | 20 | login: 21 | pattern: /demo/secured/login 22 | security: false 23 | 24 | secured_area: 25 | pattern: /demo/secured/.* 26 | form_login: 27 | check_path: /demo/secured/login_check 28 | login_path: /demo/secured/login 29 | logout: 30 | path: /demo/secured/logout 31 | target: /demo/ 32 | #anonymous: ~ 33 | #http_basic: 34 | # realm: "Secured Demo Area" 35 | 36 | access_control: 37 | #- { path: /login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https } 38 | -------------------------------------------------------------------------------- /app/phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 14 | 15 | 16 | ../src/*/*Bundle/Tests 17 | ../src/*/Bundle/*Bundle/Tests 18 | 19 | 20 | 21 | 26 | 27 | 28 | 29 | ../src 30 | 31 | ../src/*/*Bundle/Resources 32 | ../src/*/*Bundle/Tests 33 | ../src/*/Bundle/*Bundle/Resources 34 | ../src/*/Bundle/*Bundle/Tests 35 | 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /app/config/config.yml.dist: -------------------------------------------------------------------------------- 1 | imports: 2 | - { resource: security.yml } 3 | 4 | framework: 5 | charset: UTF-8 6 | router: { resource: "%kernel.root_dir%/config/routing.yml" } 7 | validation: { enabled: true } 8 | templating: { engines: ['twig'] } 9 | session: 10 | lifetime: 3600 11 | auto_start: true 12 | secret: xxxxxxxxxxxxxxxxxxxxx # you may want to change this 13 | 14 | # Twig Configuration 15 | twig: 16 | debug: %kernel.debug% 17 | strict_variables: %kernel.debug% 18 | 19 | # Assetic Configuration 20 | assetic: 21 | debug: %kernel.debug% 22 | use_controller: false 23 | 24 | # Doctrine Configuration 25 | doctrine: 26 | dbal: 27 | default_connection: default 28 | connections: 29 | default: 30 | driver: pdo_mysql 31 | host: localhost 32 | dbname: symfony_empty 33 | user: ~ 34 | password: ~ 35 | 36 | orm: 37 | auto_generate_proxy_classes: %kernel.debug% 38 | default_entity_manager: default 39 | entity_managers: 40 | default: 41 | mappings: 42 | FrameworkBundle: {} 43 | 44 | 45 | # Swiftmailer Configuration 46 | swiftmailer: 47 | transport: smtp 48 | host: localhost 49 | username: ~ 50 | password: ~ 51 | 52 | jms_security_extra: 53 | secure_controllers: true 54 | secure_all_services: false 55 | -------------------------------------------------------------------------------- /app/AppKernel.php: -------------------------------------------------------------------------------- 1 | getEnvironment(), array('dev', 'test'))) { 26 | $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle(); 27 | } 28 | 29 | return $bundles; 30 | } 31 | 32 | public function registerContainerConfiguration(LoaderInterface $loader) 33 | { 34 | $basename = __DIR__ . '/config/config_' . $this->getEnvironment(); 35 | 36 | if (file_exists($basename . '_local.yml')) { 37 | $loader->load($basename . '_local.yml'); 38 | } else { 39 | $loader->load($basename . '.yml'); 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Symfony Light Edition 2 | ===================== 3 | 4 | What's inside? 5 | -------------- 6 | 7 | Symfony Light Edition comes pre-configured with the following bundles: 8 | 9 | * FrameworkBundle 10 | * MonologBundle 11 | * TwigBundle 12 | 13 | Optionally: 14 | * SecurityBundle ( see security.yml.dist file ) 15 | * SensioFrameworkExtraBundle 16 | * SecurityExtraBundle ( see config.yml.dist file ) 17 | * DoctrineBundle ( see config.yml.dist file ) 18 | * SwiftmailerBundle ( see config.yml.dist file ) 19 | * AsseticBundle 20 | * WebProfilerBundle (in dev/test env) 21 | 22 | Installation 23 | ------------ 24 | 25 | This distribution is made to be extracted in an empty git repository, in order to initiate a new Symfony2 project. 26 | Nothing special, just extract and run it! 27 | 28 | You can simply download it via `https://github.com/knplabs/symfony-light/tarball/master` and unpack it. 29 | 30 | wget --no-check-certificate https://github.com/knplabs/symfony-light/tarball/master -O symfony-light-master.tar.gz 31 | tar -xzvf symfony-light-master.tar.gz 32 | mv *-symfony-light-* my-project 33 | cd my-project 34 | 35 | Vendors, or how to use submodules 36 | --------------------------------- 37 | 38 | **This requires you to be in a working git repository, at root level.** 39 | If you are not, you can init a new repository in the current folder by simply typing: 40 | 41 | git init 42 | 43 | Run the following script: 44 | 45 | * `./bin/init-submodule.sh [.gitmodules.dist] [1] 46 | 47 | * [.gitmodules.dist] is a gitmodule file containing all needed vendors. If ommited, ``.gitmodules.dist`` is used 48 | * [1] is the git clone depth to limit history, and thus, filesystem size of vendors. If ommited, all history will be cloned 49 | 50 | This script automates the creation of submodules, but you still can do it manually via: 51 | 52 | git submodule add vendor/ 53 | 54 | 55 | Last but not least, setup assets using: 56 | 57 | ./app/console assets:install web --symlink 58 | 59 | 60 | Configuration 61 | ------------- 62 | 63 | **You don't need to configure anything** by default, as the basic configuration file works out of the box. 64 | 65 | The distribution is configured with the following defaults: 66 | 67 | * Twig is the only configured template engine; 68 | * Doctrine ORM/DBAL is deactivated ( see config.yml.dist file ); 69 | * Swiftmailer is deactivated ( see config.yml.dist file ); 70 | * Annotations for everything are enabled ( see config.yml.dist file ). 71 | 72 | 73 | Custom config 74 | ------------- 75 | 76 | If you have special configurations depending on your machine or environment, you can override any config_*.yml. 77 | 78 | For example, if you have a different database password than the default one, you can modifiy it by adding a file named `config_dev_local.yml`: 79 | 80 | imports: 81 | - { resource: config_dev.yml } 82 | 83 | doctrine: 84 | dbal: 85 | connections: 86 | default: 87 | dbname: my_symfony_light_special_db_name 88 | user: florian 89 | password: chaaaangeMe 90 | 91 | 92 | If you want to use the CLI, a console application is available at 93 | `app/console`. 94 | 95 | Enjoy! 96 | -------------------------------------------------------------------------------- /.gitmodules.full.dist: -------------------------------------------------------------------------------- 1 | [submodule "vendor/symfony"] 2 | path = vendor/symfony 3 | url = git://github.com/symfony/symfony.git 4 | version = master 5 | [submodule "vendor/monolog"] 6 | path = vendor/monolog 7 | url = git://github.com/Seldaek/monolog.git 8 | version = master 9 | [submodule "vendor/assetic"] 10 | path = vendor/assetic 11 | url = git://github.com/kriswallsmith/assetic.git 12 | version = master 13 | [submodule "vendor/doctrine-common"] 14 | path = vendor/doctrine-common 15 | url = git://github.com/doctrine/common.git 16 | version = master 17 | [submodule "vendor/twig"] 18 | path = vendor/twig 19 | url = git://github.com/fabpot/Twig.git 20 | version = master 21 | [submodule "vendor/twig-extensions"] 22 | path = vendor/twig-extensions 23 | url = git://github.com/fabpot/Twig-extensions.git 24 | version = master 25 | [submodule "vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle"] 26 | path = vendor/bundles/Symfony/Bundle/DoctrineMongoDBBundle 27 | url = git://github.com/symfony/DoctrineMongoDBBundle.git 28 | version = master 29 | [submodule "vendor/bundles/Sensio/Bundle/FrameworkExtraBundle"] 30 | path = vendor/bundles/Sensio/Bundle/FrameworkExtraBundle 31 | url = git://github.com/sensio/SensioFrameworkExtraBundle.git 32 | version = master 33 | [submodule "vendor/gedmo-doctrine-extensions"] 34 | path = vendor/gedmo-doctrine-extensions 35 | url = git://github.com/l3pp4rd/DoctrineExtensions.git 36 | version = master 37 | [submodule "vendor/doctrine-mongodb-odm"] 38 | path = vendor/doctrine-mongodb-odm 39 | url = git://github.com/doctrine/mongodb-odm.git 40 | version = master 41 | [submodule "vendor/doctrine-mongodb"] 42 | path = vendor/doctrine-mongodb 43 | url = git://github.com/doctrine/mongodb.git 44 | version = master 45 | [submodule "vendor/Behat/BehatBundle"] 46 | path = vendor/Behat/BehatBundle 47 | url = git://github.com/Behat/BehatBundle.git 48 | version = master 49 | [submodule "vendor/Behat/Gherkin"] 50 | path = vendor/Behat/Gherkin 51 | url = git://github.com/Behat/Gherkin.git 52 | version = master 53 | [submodule "vendor/Behat/Behat"] 54 | path = vendor/Behat/Behat 55 | url = git://github.com/Behat/Behat.git 56 | version = master 57 | [submodule "vendor/Behat/Mink"] 58 | path = vendor/Behat/Mink 59 | url = git://github.com/Behat/Mink.git 60 | version = master 61 | [submodule "vendor/Behat/MinkBundle"] 62 | path = vendor/Behat/MinkBundle 63 | url = git://github.com/Behat/MinkBundle.git 64 | version = master 65 | [submodule "vendor/Behat/SahiClient"] 66 | path = vendor/Behat/SahiClient 67 | url = git://github.com/Behat/SahiClient.git 68 | version = master 69 | [submodule "vendor/Buzz"] 70 | path = vendor/Buzz 71 | url = git://github.com/kriswallsmith/Buzz.git 72 | version = master 73 | [submodule "vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle"] 74 | path = vendor/bundles/Symfony/Bundle/DoctrineFixturesBundle 75 | url = git://github.com/symfony/DoctrineFixturesBundle.git 76 | version = master 77 | [submodule "vendor/doctrine-data-fixtures"] 78 | path = vendor/doctrine-data-fixtures 79 | url = git://github.com/doctrine/data-fixtures.git 80 | version = master 81 | [submodule "vendor/bundles/Stof/DoctrineExtensionsBundle"] 82 | path = vendor/bundles/Stof/DoctrineExtensionsBundle 83 | url = git://github.com/stof/StofDoctrineExtensionsBundle.git 84 | version = master 85 | [submodule "vendor/bundles/Symfony/Bundle/AsseticBundle"] 86 | path = vendor/bundles/Symfony/Bundle/AsseticBundle 87 | url = git://github.com/symfony/AsseticBundle.git 88 | version = master 89 | -------------------------------------------------------------------------------- /app/check.php: -------------------------------------------------------------------------------- 1 | 23 | 24 | 32 | 33 | 34 |

symfony 35 | REQUIREMENTS CHECK

36 | EOF 37 | ; 38 | echo sprintf("

php.ini used by PHP: %s

", get_ini_path()); 39 | } 40 | 41 | // mandatory 42 | echo_title("Mandatory requirements"); 43 | check(version_compare(phpversion(), '5.3.2', '>='), sprintf('Checking that PHP version is at least 5.3.2 (%s installed)', phpversion()), 'Install PHP 5.3.1 or newer (current version is '.phpversion(), true); 44 | check(ini_get('date.timezone'), 'Checking that the "date.timezone" setting is set', 'Set the "date.timezone" setting in php.ini (like Europe/Paris)', true); 45 | check(is_writable(__DIR__.'/../app/cache'), sprintf('Checking that app/cache/ directory is writable'), 'Change the permissions of the app/cache/ directory so that the web server can write in it', true); 46 | check(is_writable(__DIR__.'/../app/logs'), sprintf('Checking that the app/logs/ directory is writable'), 'Change the permissions of the app/logs/ directory so that the web server can write in it', true); 47 | 48 | // warnings 49 | echo_title("Optional checks"); 50 | check(class_exists('DomDocument'), 'Checking that the PHP-XML module is installed', 'Install and enable the php-xml module', false); 51 | check(defined('LIBXML_COMPACT'), 'Checking that the libxml version is at least 2.6.21', 'Upgrade your php-xml module with a newer libxml', false); 52 | check(function_exists('token_get_all'), 'Checking that the token_get_all() function is available', 'Install and enable the Tokenizer extension (highly recommended)', false); 53 | check(function_exists('mb_strlen'), 'Checking that the mb_strlen() function is available', 'Install and enable the mbstring extension', false); 54 | check(function_exists('iconv'), 'Checking that the iconv() function is available', 'Install and enable the iconv extension', false); 55 | check(function_exists('utf8_decode'), 'Checking that the utf8_decode() is available', 'Install and enable the XML extension', false); 56 | check(function_exists('posix_isatty'), 'Checking that the posix_isatty() is available', 'Install and enable the php_posix extension (used to colorized the CLI output)', false); 57 | check(class_exists('Locale'), 'Checking that the intl extension is available', 'Install and enable the intl extension (used for validators)', false); 58 | 59 | $accelerator = 60 | (function_exists('apc_store') && ini_get('apc.enabled')) 61 | || 62 | function_exists('eaccelerator_put') && ini_get('eaccelerator.enable') 63 | || 64 | function_exists('xcache_set') 65 | ; 66 | check($accelerator, 'Checking that a PHP accelerator is installed', 'Install a PHP accelerator like APC (highly recommended)', false); 67 | 68 | check(!ini_get('short_open_tag'), 'Checking that php.ini has short_open_tag set to off', 'Set short_open_tag to off in php.ini', false); 69 | check(!ini_get('magic_quotes_gpc'), 'Checking that php.ini has magic_quotes_gpc set to off', 'Set magic_quotes_gpc to off in php.ini', false); 70 | check(!ini_get('register_globals'), 'Checking that php.ini has register_globals set to off', 'Set register_globals to off in php.ini', false); 71 | check(!ini_get('session.auto_start'), 'Checking that php.ini has session.auto_start set to off', 'Set session.auto_start to off in php.ini', false); 72 | 73 | echo_title("Optional checks (Doctrine)"); 74 | 75 | check(class_exists('PDO'), 'Checking that PDO is installed', 'Install PDO (mandatory for Doctrine)', false); 76 | if (class_exists('PDO')) { 77 | $drivers = PDO::getAvailableDrivers(); 78 | check(count($drivers), 'Checking that PDO has some drivers installed: '.implode(', ', $drivers), 'Install PDO drivers (mandatory for Doctrine)'); 79 | } 80 | 81 | if (!is_cli()) { 82 | echo ''; 83 | } 84 | 85 | /** 86 | * Checks a configuration. 87 | */ 88 | function check($boolean, $message, $help = '', $fatal = false) 89 | { 90 | if (is_cli()) { 91 | echo $boolean ? " OK " : sprintf("\n\n[[%s]] ", $fatal ? ' ERROR ' : 'WARNING'); 92 | echo sprintf("$message%s\n", $boolean ? '' : ': FAILED'); 93 | 94 | if (!$boolean) { 95 | echo " *** $help ***\n"; 96 | if ($fatal) { 97 | die("You must fix this problem before resuming the check.\n"); 98 | } 99 | } 100 | } else { 101 | if ($boolean) { 102 | $color = '#60b111'; 103 | $image = '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'; 104 | $alt = 'ok'; 105 | } elseif ($fatal) { 106 | $color = '#fd3900'; 107 | $image = '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'; 108 | $alt = 'fatal'; 109 | } else { 110 | $color = '#6a9ee6'; 111 | $image = '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'; 112 | $alt = 'warning'; 113 | } 114 | 115 | echo sprintf(' 116 |
117 |
%s
118 |
%s%s
119 |
120 |
', $color, $alt, $image, $message, !$boolean ? '
What to do'.($fatal ? '' : ' (optional)').': '.$help.'
' : ''); 121 | } 122 | } 123 | 124 | function echo_title($title) 125 | { 126 | if (is_cli()) { 127 | echo "\n** $title **\n\n"; 128 | } else { 129 | echo "

$title

"; 130 | } 131 | } 132 | 133 | /** 134 | * Gets the php.ini path used by the current PHP interpretor. 135 | * 136 | * @return string the php.ini path 137 | */ 138 | function get_ini_path() 139 | { 140 | if ($path = get_cfg_var('cfg_file_path')) { 141 | return $path; 142 | } 143 | 144 | return 'WARNING: not using a php.ini file'; 145 | } 146 | 147 | function is_cli() 148 | { 149 | return !isset($_SERVER['HTTP_HOST']); 150 | } 151 | --------------------------------------------------------------------------------