mirror of
https://github.com/ZeJMaN/LBCAlerte_ynh.git
synced 2025-06-07 21:15:29 +02:00
286 lines
9.2 KiB
PHP
286 lines
9.2 KiB
PHP
<?php
|
|
|
|
define("DOCUMENT_ROOT", __DIR__);
|
|
define("DS", DIRECTORY_SEPARATOR);
|
|
|
|
// Define application environment
|
|
defined("APPLICATION_ENV")
|
|
|| define("APPLICATION_ENV", (getenv("APPLICATION_ENV") ? getenv("APPLICATION_ENV") : "production"));
|
|
|
|
// Define application environment
|
|
define("APPLICATION_VERSION", require DOCUMENT_ROOT."/version.php");
|
|
|
|
// Constante utilisée pour forcer le navigateur à télécharger
|
|
// les fichiers statiques (js, css, html, etc)
|
|
define("STATIC_REV", 10);
|
|
|
|
set_include_path(
|
|
__DIR__."/lib".PATH_SEPARATOR.get_include_path()
|
|
);
|
|
|
|
require_once "Http/Client/Curl.php";
|
|
require_once "Config/Lite.php";
|
|
require_once "Log4php/Logger.php";
|
|
|
|
class Bootstrap
|
|
{
|
|
/**
|
|
* @var Config_Lite
|
|
*/
|
|
protected $_config;
|
|
|
|
/**
|
|
* @var HttpClientCurl
|
|
*/
|
|
protected $_client;
|
|
|
|
protected function initAutoload()
|
|
{
|
|
spl_autoload_register(function ($className) {
|
|
$filename = ltrim(str_replace("\\", "/", $className), "/");
|
|
if (false !== strpos($filename, "App/")) {
|
|
$filename = __DIR__."/app/models/".
|
|
str_replace("App/", "", $filename).".php";
|
|
} else {
|
|
$filename = __DIR__."/lib/".$filename.".php";
|
|
}
|
|
if (is_file($filename)) {
|
|
require_once $filename;
|
|
}
|
|
});
|
|
}
|
|
|
|
protected function initPHPConfig()
|
|
{
|
|
mb_internal_encoding("UTF-8");
|
|
if (function_exists("date_default_timezone_set")) {
|
|
date_default_timezone_set("Europe/Paris");
|
|
}
|
|
if (APPLICATION_ENV == "development") {
|
|
ini_set("display_errors", true);
|
|
ini_set("error_reporting", -1);
|
|
}
|
|
}
|
|
|
|
protected function initLogger()
|
|
{
|
|
Logger::configure(array(
|
|
"rootLogger" => array(
|
|
"appenders" => array("default", "error"),
|
|
"level" => APPLICATION_ENV == "development"?"debug":"info"
|
|
),
|
|
"appenders" => array(
|
|
"default" => array(
|
|
"class" => "LoggerAppenderRollingFile",
|
|
"layout" => array(
|
|
"class" => "LoggerLayoutPattern",
|
|
"params" => array(
|
|
"conversionPattern" => "%date %-5level %msg%n"
|
|
)
|
|
),
|
|
"params" => array(
|
|
"file" => DOCUMENT_ROOT."/var/log/info.log",
|
|
"maxFileSize" => APPLICATION_ENV == "development"?"20MB":"3MB",
|
|
"maxBackupIndex" => 5,
|
|
"append" => true,
|
|
"threshold" => "all",
|
|
)
|
|
),
|
|
"error" => array(
|
|
"class" => "LoggerAppenderRollingFile",
|
|
"layout" => array(
|
|
"class" => "LoggerLayoutPattern",
|
|
"params" => array(
|
|
"conversionPattern" => "%date %-5level %msg%n"
|
|
)
|
|
),
|
|
"params" => array(
|
|
"file" => DOCUMENT_ROOT."/var/log/error.log",
|
|
"maxFileSize" => "3MB",
|
|
"maxBackupIndex" => 5,
|
|
"append" => true,
|
|
"threshold" => "error",
|
|
)
|
|
)
|
|
)
|
|
));
|
|
}
|
|
|
|
protected function initConfig()
|
|
{
|
|
// valeurs par défaut.
|
|
$this->_config->set("proxy", "ip", "");
|
|
$this->_config->set("proxy", "port", "");
|
|
$this->_config->set("proxy", "user", "");
|
|
$this->_config->set("proxy", "password", "");
|
|
$this->_config->set("http", "user_agent", "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100628 Ubuntu/10.04 (lucid) Firefox/3.6.6");
|
|
$this->_config->set("general", "check_start", 7);
|
|
$this->_config->set("general", "check_end", 24);
|
|
$this->_config->set("general", "version", 0);
|
|
$this->_config->set("general", "baseurl", "");
|
|
$this->_config->set("storage", "type", "files");
|
|
|
|
// lit la configuration du fichier.
|
|
try {
|
|
$this->_config->read();
|
|
} catch (Config_Lite_Exception_Runtime $e) {
|
|
return;
|
|
}
|
|
|
|
if (isset($_SERVER["HTTP_HOST"])) {
|
|
$current_base_url = $this->_config->get("general", "baseurl", "");
|
|
$base_url = "http";
|
|
if (!empty($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] != "off") {
|
|
$base_url .= "s";
|
|
}
|
|
$base_url .= "://".$_SERVER["HTTP_HOST"]."/";
|
|
if (!empty($_SERVER["REQUEST_URI"])) {
|
|
$request_uri = trim($_SERVER["REQUEST_URI"], "/");
|
|
if (false !== $pos = strpos($request_uri, "?")) {
|
|
$request_uri = mb_substr($request_uri, 0, $pos);
|
|
}
|
|
if (false !== strpos($request_uri, ".php")) {
|
|
$request_uri = substr($request_uri, 0, strrpos($request_uri, "/"));
|
|
}
|
|
if ($request_uri) {
|
|
$base_url .= trim($request_uri, "/")."/";
|
|
}
|
|
}
|
|
if ($base_url != $current_base_url) {
|
|
$this->_config->set("general", "baseurl", $base_url);
|
|
$this->_config->save();
|
|
}
|
|
}
|
|
}
|
|
|
|
public function getClient()
|
|
{
|
|
if (!$this->_client) {
|
|
$client = new HttpClientCurl();
|
|
$proxy = $this->_config->get("proxy", null, array());
|
|
if (!empty($proxy["ip"])) {
|
|
$client->setProxyIp($proxy["ip"]);
|
|
if (!empty($proxy["port"])) {
|
|
$client->setProxyPort($proxy["port"]);
|
|
}
|
|
}
|
|
if ($userAgent = $this->_config->get("http", "user_agent", "")) {
|
|
$client->setUserAgent($userAgent);
|
|
}
|
|
}
|
|
return $client;
|
|
}
|
|
|
|
public function __construct()
|
|
{
|
|
set_exception_handler(array($this, "_exceptionHandler"));
|
|
set_error_handler(
|
|
array($this, "_errorHandler"),
|
|
E_ERROR | E_WARNING | E_USER_ERROR | E_USER_WARNING
|
|
);
|
|
}
|
|
|
|
public function bootstrap(Config_Lite $config)
|
|
{
|
|
$this->_config = $config;
|
|
foreach (get_class_methods($this) AS $method) {
|
|
if (0 === strpos($method, "init")) {
|
|
$this->$method();
|
|
}
|
|
}
|
|
}
|
|
|
|
public function _exceptionHandler($e)
|
|
{
|
|
Logger::getLogger("main")->error(
|
|
get_class($e)." : #".
|
|
$e->getCode()." ".
|
|
$e->getMessage()." (".$e->getFile().":".$e->getLine().")"
|
|
);
|
|
|
|
if ("development" == APPLICATION_ENV) {
|
|
var_dump($e);
|
|
return;
|
|
}
|
|
|
|
die("Un problème est survenu lors de l'exécution du programme.\n");
|
|
}
|
|
|
|
public function _errorHandler($errno, $errstr, $errfile, $errline)
|
|
{
|
|
$display_errors = ini_get("display_errors");
|
|
if ($display_errors || "development" == APPLICATION_ENV) {
|
|
var_dump($display_errors,$errno, $errstr, $errfile, $errline);
|
|
return false;
|
|
}
|
|
|
|
switch ($errno) {
|
|
case E_NOTICE:
|
|
$errno_const = "E_NOTICE";
|
|
break;
|
|
case E_ERROR:
|
|
$errno_const = "E_ERROR";
|
|
break;
|
|
case E_USER_ERROR:
|
|
$errno_const = "E_USER_ERROR";
|
|
break;
|
|
case E_WARNING:
|
|
$errno_const = "E_WARNING";
|
|
break;
|
|
case E_USER_WARNING:
|
|
$errno_const = "E_USER_WARNING";
|
|
break;
|
|
default:
|
|
$errno_const = $errno;
|
|
}
|
|
|
|
Logger::getLogger("main")->error(
|
|
$errno_const." ".$errstr." (".$errfile.":".$errline.")"
|
|
);
|
|
|
|
// Pour les ERROR, on stoppe l'exécution du script
|
|
if ($errno == E_ERROR || $errno == E_USER_ERROR) {
|
|
die("Un problème est survenu lors de l'exécution du programme.\n");
|
|
}
|
|
|
|
return true;
|
|
}
|
|
}
|
|
|
|
$config = new Config_Lite(DOCUMENT_ROOT."/var/config.ini");
|
|
|
|
$bootstrap = new Bootstrap();
|
|
$bootstrap->bootstrap($config);
|
|
$userAuthed = null;
|
|
|
|
// initialise le client HTTP.
|
|
$client = $bootstrap->getClient();
|
|
|
|
// si stockage en base de données, on initialise la connexion
|
|
if ("db" == $config->get("storage", "type", "files")) {
|
|
$options = array_merge(array(
|
|
"host" => "",
|
|
"user" => "",
|
|
"password" => "",
|
|
"dbname" => ""
|
|
), $config->get("storage", "options"));
|
|
$dbConnection = new mysqli(
|
|
$options["host"],
|
|
$options["user"],
|
|
$options["password"],
|
|
$options["dbname"]
|
|
);
|
|
if ($dbConnection->connect_error) {
|
|
Logger::getLogger("main")->error(
|
|
"Connexion à la base de données échouée : ".
|
|
$dbConnection->connect_error
|
|
);
|
|
echo "Un problème est survenu lors de la génération de la page.";
|
|
exit;
|
|
}
|
|
$driver = new mysqli_driver();
|
|
$driver->report_mode = MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT;
|
|
$dbConnection->set_charset("utf8");
|
|
unset($options);
|
|
}
|