Taille de mémoire autorisée de X octets épuisée (tentative d’allocation de X octets) en PHP

Je reçois cette erreur:

Taille de mémoire autorisée de 33554432 octets épuisée (tentative d’allocation de 43148176 octets)

Ce que j’essaie de faire, c’est sur ma page d’accueil, il y a un formulaire de connexion popup où les utilisateurs se connectent et accèdent à la page ‘site / members_area’. Mais quelque chose de très grave se passe chez moi après avoir rempli le formulaire lorsque je clique sur le bouton de connexion. Je reçois ces erreurs: premièrement, la limite de temps d’exécution maximale, après avoir corrigé l’erreur, j’ai augmenté la limite de mémoire, ce qui n’est pas une bonne pratique pour un bon codage.

Et même mon code n’a pas besoin de beaucoup de mémoire – où est-ce que je me trompe? En dernier après avoir passé beaucoup de temps après avoir soumis le formulaire, je reçois 500 erreurs de serveur interne? J’ai déjà cherché Stack Overflow pour cette question mais pas d’utilisation?

Je dirige mon formulaire vers mon LoginController qui est

 load->library('session'); $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('html'); $this->load->database(); $this->load->library('form_validation'); } public function index() { //load the login model $this->load->model('login_model'); $qry=$this->login_model->validate(); if($qry) //if user's credentials validated { $data=array( 'username'=>$this->input->post('username'), 'is_logged_in'=>TRUE ); $this->session->set_userdata($data); redirect('site/members_area'); } else { $this->index(); } } }?> 

Mon modèle est:

 load->database(); } /*//get the username & password from tbl_usrs function get_user($usr, $pwd) { $sql = "select * from tbl_usrs where username = '" . $usr . "' and password = '" .$pwd . "' "; $query = $this->db->query($sql); return $query->num_rows(); } */ function validate() { $this->db->where('username',$this->input->post('username')); $this->db->where('password',md5($this->input->post('password'))); $qry=$this->db->get('tbl_usrs'); if($qry->num_rows==1) { return true; } }// function validate ends }?> 

Il n’y a pas de boucle infinie et je n’essaie pas non plus de lire un fichier.

Généralement, ce type se produit lorsque votre script utilise trop de mémoire. Cela peut souvent arriver en PHP si vous avez une boucle qui est hors contrôle et que vous créez des objects ou ajoutez des tableaux à chaque passage de la boucle. Vérifiez les boucles infinies.

Si ce n’est pas le problème, essayez d’aider PHP en détruisant les objects dont vous avez fini en les définissant sur null, par exemple. $OldVar = null; .

Vérifiez également le code où l’erreur se produit. Vous attendez-vous à ce que cette ligne alloue une quantité énorme de mémoire? Sinon, essayez de trouver ce qui ne va pas.

@tpojka a raison: ce qui se passe, c’est que lorsque les informations d’identification échouent, essayez de recharger votre méthode d’indexation, ce qui se répète à l’infini. Vous devez supprimer index(); méthode et redirect vers une autre page ou faire écho à une déclaration.

Essayez quelque chose comme ça:

 load->library('session'); $this->load->helper('form'); $this->load->helper('url'); $this->load->helper('html'); $this->load->database(); $this->load->library('form_validation'); } public function index() { //load the login model $this->load->model('login_model'); // $qry=$this->login_model->validate(); //get the posted values $username = $this->input->post("username"); $password = $this->input->post("password"); //set validations $this->form_validation->set_rules("username", "username", "sortingm|required"); $this->form_validation->set_rules("password", "password", "sortingm|required"); if ($this->form_validation->run() == FALSE) { //validation fails // $this->load->view('home'); echo "Validation fails"; } else { //validation succeeds if ($this->input->post('submit') == "Login") { //check if username and password is correct $usr_result = $this->login_model->get_user($username, $password); if ($usr_result > 0) //active user record is present { //set the session variables $sessiondata = array( 'username' => $username, 'loginuser' => TRUE ); $this->session->set_userdata($sessiondata); redirect("index/member_area"); //page you want to display for login user only } else { $this->session->set_flashdata('msg', '
Invalid username and password!
'); redirect('login/index'); } } else { redirect('blahhh'); } } } } ?>