Rediriger vers une page de maintenance si problème

Bonjour,

Je viens à vous car je rencontre un problème et j'aimerais un petit coup de main de connaisseurs.
J'utilise un site internet que j'ai coté avec mes connaissances + quelques fonctions trouvées sur internet et je but sur une fonction.
En effet, j'aimerais que mon site redirige vers une page ( maintenance/index.html ) si mon site n'arrive pas à se connecter à sa base de données.
Mon site est hébergé sur un serveur A qui va chercher ses informations dans une base de données installée sur le serveur B.
J'utilise actuellement un .htaccess qui redirige tout vers le fichier "index.php"
- Ce dernier se connecte à la base de données et affiche les informations.
- Cependant mon hébergeur du serveur B rencontre quelques problèmes actuellement ce qui fait que mon site web tourne dans le vide puis affiche un message d'erreur.

Je souhaite donc, en cas de non connexion à la database distante que mon site nous redirige vers /maintenance/index.html

Je vous remercie d'avance pour votre aide.

8 réponses

  1. Bonjour,
    tu as surement un try catch entourant ta connexion a ta database. Dans le catch tu mets ta redirection.
    1
    1. Je n'ai pas compris mahdu972
      Pourrais tu être un peu plus précis s'il te plait ?
      Sinon je te remercie pour la réponse très rapide :)
      0
      1. Peux tu mettre ton code de connexion a ta base?
        0
        1. Alors, lors de mon problème de connexion j'ai un soucis dans cette fonction :

          public function initialize($where = false)
           {
            $this->connect();
          
            if(!$where)
            {
             $query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));
            }
            else 
            {
             $query = $this->connection->query(query("get_account"), array($where));
            }
            
            if($query->num_rows() > 0)
            {
             $result = $query->result_array();
             $result = $result[0];
           
             $this->id = $result["id"];
             $this->username = $result["username"];
             $this->sha_pass_hash = $result["password"];
             $this->email = $result["email"];
             $this->joindate = $result["joindate"];
             $this->last_ip = $result["last_ip"];
             $this->last_login = $result["last_login"];
             $this->expansion = $result["expansion"];
          
             return true;
            }
            else 
            {
             $this->id = 0;
             $this->username = "Visiteur";
             $this->sha_pass_hash = "";
             $this->email = ""; 
             $this->joindate =  "";
             $this->last_ip =  "";
             $this->last_login = "";
             $this->expansion = 0;
          
             return false;
            }
           }

          A la ligne 68 qui est celle-ci :
          $query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));


          Je ne sais pas trop si ça suffira ou si je dois donner d'autres informations ?
          0
          1. A quoi correspond ton $this?
            Et la fonction connect() en haut c'est toi qui l'a écrit?
            0
            1. Alors voici le fichier complet pour la connexion

              <?php
              
              class External_account_model extends CI_Model
              {
              	private $connection;
              	private $id;
              	private $username;
              	private $sha_pass_hash;
              	private $email;
              	private $joindate;
              	private $last_ip;
              	private $last_login;
              	private $expansion;
              	private $account_cache;
              
              	public function __construct()
              	{
              		parent::__construct();
              		
              		$this->account_cache = array();
              
              		if($this->user->getOnline())
              		{
              			$this->initialize();
              		}
              		else
              		{
              			$this->id = 0;
              			$this->username = "Guest";
              			$this->sha_pass_hash = "";
              			$this->email = ""; 
              			$this->joindate =  "";
              			$this->last_ip =  "";
              			$this->last_login = "";
              			$this->expansion = 0;
              		}
              	}
              
              	public function getConnection()
              	{
              		$this->connect();
              
              		return $this->connection;
              	}
              	
              	public function connect()
              	{
              		if(empty($this->connection))
              		{
              			$this->connection = $this->load->database("account", true);
              		}
              	}
              	
              	public function initialize($where = false)
              	{
              		$this->connect();
              
              		if(!$where)
              		{
              			$query = $this->connection->query(query("get_account_id"), array($this->session->userdata('id')));
              		}
              		else 
              		{
              			$query = $this->connection->query(query("get_account"), array($where));
              		}
              		
              		if($query->num_rows() > 0)
              		{
              			$result = $query->result_array();
              			$result = $result[0];
              	
              			$this->id = $result["id"];
              			$this->username = $result["username"];
              			$this->sha_pass_hash = $result["password"];
              			$this->email = $result["email"];
              			$this->joindate = $result["joindate"];
              			$this->last_ip = $result["last_ip"];
              			$this->last_login = $result["last_login"];
              			$this->expansion = $result["expansion"];
              
              			return true;
              		}
              		else 
              		{
              			$this->id = 0;
              			$this->username = "Guest";
              			$this->sha_pass_hash = "";
              			$this->email = ""; 
              			$this->joindate =  "";
              			$this->last_ip =  "";
              			$this->last_login = "";
              			$this->expansion = 0;
              
              			return false;
              		}
              	}
              
              	/**
              	 * Create a new account
              	 * @param String $username
              	 * @param String $password
              	 * @param String $email
              	 */
              	public function createAccount($username, $password, $email, $expansion, $isHashed = false) 
              	{
              		$this->connect();
              
              		$sha_pass_hash = $this->user->createHash($username, $password);
              
              		$data = array(
              			column("account", "username") => $username,
              			column("account", "password") => ($isHashed) ? $password : $this->user->createHash($username, $password),
              			column("account", "email") => $email,
              			column("account", "expansion") => $expansion,
              			column("account", "last_ip") => $this->input->ip_address(),
              			column("account", "joindate") => date("Y-m-d")
              		);
              
              		// Fix for ArcEmu
              		if(get_class($this->realms->getEmulator()) == "Arcemu")
              		{
              			$data['banned'] = 0;
              		}
              
              		$this->connection->insert(table("account"), $data);
              
              		// Fix for TrinityCore RBAC (or any emulator with 'rbac' in it's emulator filename)
              		if(preg_match("/rbac/i", get_class($this->realms->getEmulator())))
              		{
              			$userId = $this->user->getId($username);
              			$this->connection->query("INSERT INTO rbac_account_groups('accountId', 'groupId', 'realmId') values (?, 1, -1)", array($userId));
              		}
              
              		$this->updateDailySignUps();
              	}
              
              	private function updateDailySignUps()
              	{
              		$query = $this->db->query("SELECT COUNT(*) AS 'total' FROM daily_signups WHERE 'date'=?", array(date("Y-m-d")));
              
              		$row = $query->result_array();
              
              		if($row[0]['total'])
              		{
              			$this->db->query("UPDATE daily_signups SET amount = amount + 1 WHERE 'date'=?", array(date("Y-m-d")));
              		}
              		else
              		{
              			$this->db->query("INSERT INTO daily_signups('date', amount) VALUES(?, ?)", array(date("Y-m-d"), 1));
              		}
              	}
              
              	/**
              	 * Get the banned status
              	 * @param Int $id
              	 * @return Boolean
              	 */
              	public function getBannedStatus($id)
              	{
              		$this->connect();
              
              		$query = $this->connection->query(query("get_banned"), array($id));
              
              		if($query->num_rows() > 0)
              		{
              			$row = $query->result_array();
              
              			return $row[0];
              		}
              		elseif(query('get_ip_banned'))
              		{
              			//check if the ip is banned
              			$query = $this->connection->query(query("get_ip_banned"), array($this->input->ip_address(), time()));
              			
              			if($query->num_rows() > 0)
              			{
              				$row = $query->result_array();
              
              				return $row[0];
              			}
              			else
              			{
              				return false;
              			}
              		}
              	}
              	
              	/**
              	 * Get the rank
              	 * @param String $value
              	 * @param Boolean $isUsername
              	 * @return int
              	 */
              	public function getRank($value = false, $isUsername = false)
              	{
              		$this->connect();
              
              		if(!$value)
              		{
              			$value = $this->getId();
              		}
              		elseif($isUsername)
              		{
              			$value = $this->getId($value);
              		}
              		
              		$query = $this->connection->query(query("get_rank"), array($value));
              
              		if($query->num_rows() > 0)
              		{
              			$row = $query->result_array();
              
              			if($row[0]["gmlevel"] == "")
              			{
              				$row[0]["gmlevel"] = 0;
              			}
              			
              			return $row[0]["gmlevel"];
              		}
              		else
              		{
              			return 0;
              		}
              	}
              
              	/**
              	 * Check if an username exists
              	 * @param String $username
              	 * @return Boolean
              	 */
              	public function usernameExists($username)
              	{
              		$this->connect();
              
              		$count = $this->connection->from(table("account"))->where(array(column("account", "username") => $username))->count_all_results();
              		
              		if($count)
              		{
              			return true;
              		}
              		else
              		{
              			return false;
              		}
              	}
              
              	/**
              	 * Get total amount of accounts
              	 * @return Int
              	 */
              	public function getAccountCount()
              	{
              		$this->connect();
              
              		$query = $this->connection->query("SELECT COUNT(*) as 'total' FROM ".table("account"));
              		$row = $query->result_array();
              
              		return $row[0]['total'];
              	}
              
              	/**
              	 * Check if an user id exists
              	 * @param Int $id
              	 * @return Boolean
              	 */
              	public function userExists($id)
              	{
              		$this->connect();
              
              		$count = $this->connection->from(table("account"))->where(array(column("account", "id") => $id))->count_all_results();
              		
              		if($count)
              		{
              			return true;
              		}
              		else
              		{
              			return false;
              		}
              	}
              
              	/**
              	 * Check if an email exists
              	 * @param String $email
              	 * @return Boolean
              	 */
              	public function emailExists($email)
              	{
              		$this->connect();
              
              		$count = $this->connection->from(table("account"))->where(array(column("account", "email") => $email))->count_all_results();
              		
              		if($count)
              		{
              			return true;
              		}
              		else
              		{
              			return false;
              		}
              	}
              	
              	/*
              	| -------------------------------------------------------------------
              	|  Setters
              	| -------------------------------------------------------------------
              	*/
              	public function setUsername($oldUsername, $newUsername)
              	{
              		$this->connect();
              
              		$this->connection->where(column("account", "username"), $oldUsername);
              		$this->connection->update(table("account"), array(column("account", "username") => $newUsername));
              	}
              	
              	public function setPassword($username, $newPassword)
              	{
              		$this->connect();
              
              		$this->connection->where(column("account", "username"), $username);
              
              		if(column("account", "v") && column("account", "s") && column("account", "sessionkey"))
              		{
              			$this->connection->update(table("account"), array(
              				column("account", "v") => "", 
              				column("account", "s")  => "", 
              				column("account", "sessionkey") => "", 
              				column("account", "password") => $newPassword
              				)
              			);
              		}
              		else
              		{
              			$this->connection->update(table("account"), array(column("account", "password") => $newPassword));
              		}
              	}
              	
              	public function setEmail($username, $newEmail)
              	{
              		$this->connect();
              
              		$this->connection->where(column("account", "username"), $username);
              		$this->connection->update(table("account"), array(column("account", "email") => $newEmail));
              	}
              	
              	public function setExpansion($username, $newExpansion)
              	{
              		$this->connect();
              
              		$this->connection->where(column("account", "username"), $username);
              		$this->connection->update(table("account"), array(column("account", "expansion") => $newExpansion));
              	}
              	
              	public function setRank($userId, $newRank)
              	{
              		$this->connect();
              
              		$this->connection->where(column("account", "id"), $userId);
              		$this->connection->update(table("account_access"), array(column("account_access", "gmlevel") => $newRank));
              	}
              	
              	/*
              	| -------------------------------------------------------------------
              	|  Getters
              	| -------------------------------------------------------------------
              	*/
              	public function getId($username = false)
              	{
              		if(!$username)
              		{
              			return $this->id;
              		}
              		else 
              		{
              			$this->connect();
              			
              			$this->connection->select(column("account", "id", true))->from(table("account"))->where(column("account", "username"), $username);
              			$query = $this->connection->get();
              			
              			if($query->num_rows() > 0)
              			{
              				$result = $query->result_array();
              			
              				return $result[0]["id"];
              			}
              			else 
              			{
              				//Return id 0
              				return false;
              			}
              				
              		}
              	}
              	
              	/**
              	 * Get the username
              	 * @param Int $id
              	 * @return String
              	 */
              	public function getUsername($id = false)
              	{
              		if(!$id)
              		{
              			return $this->username;
              		}
              		else
              		{
              			$this->connect();
              			
              			$this->connection->select(column("account", "username", true))->from(table("account"))->where(array(column("account", "id") => $id));
              			$query = $this->connection->get();
              			
              			if($query->num_rows() > 0)
              			{
              				$result = $query->result_array();
              			
              				return $result[0]["username"];
              			}
              			else 
              			{
              				return "Unknown";
              			}
              		}
              	}
              
              	/**
              	 * Get the username
              	 * @param Int $id
              	 * @return String
              	 */
              	public function getInfo($id = false, $fields = "*")
              	{
              		if(!$id)
              		{
              			$id = $this->id;
              		}
              
              		if($fields != "*" && !is_array($fields))
              		{
              			$fields = preg_replace("/ /", "", $fields);
              			$fields = explode(",", $fields);
              			$fields = columns("account", $fields);
              		}
              	
              		$this->connect();
              		
              		$this->connection->select($fields)->from(table("account"))->where(array(column("account", "id") => $id));
              		$query = $this->connection->get();
              		
              		if($query->num_rows() > 0)
              		{
              			$result = $query->result_array();
              		
              			return $result[0];
              		}
              		else 
              		{
              			return false;
              		}
              		
              	}
              	
              	public function getShaPassHash()
              	{
              		return $this->sha_pass_hash;	
              	}
              	
              	public function getEmail($id = false)
              	{
              		if($id == false)
              		{
              			return $this->email;
              		}
              		else
              		{
              			// Check if it has been loaded already
              			if(array_key_exists($id, $this->account_cache))
              			{
              				return $this->account_cache[$id]['email'];
              			}
              			else
              			{
              				$this->connect();
              				
              				$this->connection->select(column("account", "username", true).','.column("account", "email").','.column("account", "joindate"))->from(table("account"))->where(array(column("account", "id") => $id));
              				$query = $this->connection->get();
              				
              				if($query->num_rows() > 0)
              				{
              					$result = $query->result_array();
              					$this->account_cache[$id] = $result[0];
              
              					return $result[0]["email"];
              				}
              				else
              				{
              					$this->account_cache[$id]["email"] = false;
              					
              					return false;
              				}
              			}
              		}
              	}
              	
              	public function getJoinDate()
              	{
              		return $this->joindate;
              	}
              	
              	public function getLastIp()
              	{
              		return $this->last_ip;
              	}
              
              	public function getExpansion()
              	{
              		return $this->expansion;
              	}
              }


              Je n'ai pas créé moi même cette partie du site. Mes compétences ne me le permettent pas malheureusement.
              Je suis désolé si je ne donne pas les bons fichiers :s
              0
              1. Dans la fonction connect, entouré cette partie par un try catch
                $this->connection = $this->load->database("account", true);

                0
                1. Merci pour l'aide que vous m'apportez.
                  Est ce que ceci conviendrait ?

                  	public function connect()
                  	{
                  		if(empty($this->connection))
                  		{
                  			try  
                   			{
                  			$this->connection = $this->load->database("account", true);
                  			}
                  			catch (Response.Redirect("maintenance/index.html")); 
                  		}
                  	}
                  0
                2. Oui essaye comme sa
                  0
                3. A priori j'ai une erreur de syntace et j'arrive pas à comprendre pourquoi.
                  La ligne en question :
                  catch (Response.Redirect("maintenance.html")); 

                  Rappel de la fonction complète :
                  	public function connect()
                  	{
                  		if(empty($this->connection))
                  		{
                  			try  
                   			{
                  			$this->connection = $this->load->database("account", true);
                  			}
                  			catch (Response.Redirect("maintenance.html")); 
                  		}
                  	}
                  0
                4. Il faut mettre des accolades
                  0
                5. Oui mais je ne vois pas comment les mettres sur ce coup la.
                  0
              2. public function connect()
                {
                if(empty($this->connection))
                {
                try
                {
                $this->connection = $this->load->database("account", true);
                }
                catch ()
                {
                Response.Redirect("maintenance.html")
                }
                }
                }

                et dans les parenthèses du catch il faut mettre l'exception qui est levé lorsqu'il y a un problème de connexion.
                0